ruby on rails - param is missing or the value is empty: task. How can I make possible to add a "To Do" while also rendering the view to create a project? -
i want when user creates project s/he add new tasks it. have figured out "solution" , have encountred error can't solve.
i dont know of "ruby correct" mix tasks actions projects controller. reason took approach couldn't figure out solution doing in views , make project saved..
this projects_controler.rb
class projectscontroller < applicationcontroller before_action :set_project, only: [:show, :edit, :update, :destroy] before_action :authenticate_user! def create @project = project.new(project_params) @task = task.new(task_params) respond_to |format| if @project.save , @task.save format.html { redirect_to @project, notice: 'project created.' } format.json { render :show, status: :created, location: @project } else format.html { render :new } format.json { render json: @project.errors, status: :unprocessable_entity } end end end # patch/put /projects/1 # patch/put /projects/1.json def update respond_to |format| if @project.update(project_params) format.html { redirect_to @project, notice: 'project updated.' } format.json { render :show, status: :ok, location: @project } else format.html { render :edit } format.json { render json: @project.errors, status: :unprocessable_entity } end end end # delete /projects/1 # delete /projects/1.json def destroy # @list = list.find(params[:id]) @project.destroy respond_to |format| format.html { redirect_to projects_url, notice: 'project destroyed.' } format.json { head :no_content } end end private # use callbacks share common setup or constraints between actions. def set_project @project = project.find(params[:id]) end # never trust parameters scary internet, allow white list through. def project_params params.require(:project).permit(:title, :description, :done, :user_id) end def set_task @task = task.find(params[:id]) end def task_params params.require(:task).permit(:title, :done, :project_id) end end
project.rb
class project < applicationrecord belongs_to :user, foreign_key: "user_id" has_many :tasks , dependent: :destroy validates_presence_of :user validates_uniqueness_of :title, on: :create, message: "must unique" validates :title, presence: true, length: { minimum: 2 } def done_tasks tasks.where(done: true).order("updated_at desc") end end
task.rb
class task < applicationrecord belongs_to :project, foreign_key: "project_id"#, class_name: "list" validates_presence_of :title def completed? !completed_at.blank? end end
routes.rb
rails.application.routes.draw devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" } resources :projects resources :tasks end authenticated :user root to: 'projects#index' end unauthenticated :user root 'welcome#home' end end
new.html.erb
<h1>new project</h1> <%= render 'form', project: @project, task: @task %> <%# render 'form', project: @project, task: @task %> <!-- custom --> <!-- shall add id projrct t trackable task????? , describe in task.rb --> <!-- <h1>tasks</h1> --> <%# f.button %> <!-- button add new task --> <%# f.button "add new task current project" %> <!-- if else mechanism adding new task via button --> <!-- when button pressed, tasks/_form appear down here --> <!-- button save task while @ same moment ..... override "create task" , "create project" save "save project task" --> <%# render '../tasks/_form' %> <%= link_to 'back', projects_path %>
_form.html.erb
<%= simple_form_for(@project, @task) |f| %> <%# form_for([@post, @comment]) |f| %> <% f.error_notification %> <div class="form-inputs"> <%= f.input :title %> <%= f.input :description %> <%= f.input :done %> <%= f.association :user %> </div> <div class="form-actions"> <%= f.button :submit %> </div> <% end %>
in task_params
params.require(:task).permit(:title, :done)
and create method should like
def create @project = project.new(project_params) @project.tasks.build(task_params) respond_to |format| if @project.save , @task.save format.html { redirect_to @project, notice: 'project created.' } format.json { render :show, status: :created, location: @project } else format.html { render :new } format.json { render json: @project.errors, status: :unprocessable_entity } end end end
Comments
Post a Comment