簡體   English   中英

Ruby on Rails 4無法使用form_for處理嵌套路線

[英]Ruby on Rails 4 Can't get form_for working with nested routes

我正在嘗試使用嵌套路線進行form_for,但無法正常工作。

這是routes.rb

Rails.application.routes.draw do
  resources :users do
    resources :tasks
  end

查看/任務/編輯

<h1>Editing task</h1>

<%= form_for [@task.user, :task], method: :put do |f| %>

  <p>
    <%= f.label :Title %><br>
    <%= f.text_field :title %>
  </p>

  <p>
    <%= f.label :Description %><br>
    <%= f.text_area :description %>
  </p>

  <p>
    <%= f.submit %>
  </p>

  <%= link_to 'Back to List', user_tasks_path %>

<% end %>

耙路

 Prefix Verb   URI Pattern                              Controller#Action
          root GET    /                                        users#index
    user_tasks GET    /users/:user_id/tasks(.:format)          tasks#index
               POST   /users/:user_id/tasks(.:format)          tasks#create
 new_user_task GET    /users/:user_id/tasks/new(.:format)      tasks#new
edit_user_task GET    /users/:user_id/tasks/:id/edit(.:format) tasks#edit
     user_task GET    /users/:user_id/tasks/:id(.:format)      tasks#show
               PATCH  /users/:user_id/tasks/:id(.:format)      tasks#update
               PUT    /users/:user_id/tasks/:id(.:format)      tasks#update
               DELETE /users/:user_id/tasks/:id(.:format)      tasks#destroy

Rails給出了一個錯誤::task:Symbol的未定義方法“ model_name”

task_controller.rb

class TasksController < ApplicationController
  def index
    @tasks = Task.where(user_id: params[:user_id])
  end

  def show
    @task = Task.find(params[:id])
    redirect_to users_path
  end

  def new
    @task = Task.new
  end

  def create
    @task = Task.new(task_params)

    if @task.save
      redirect_to @task
    else
      render 'new'
    end
  end

  def edit
    @task = Task.find(params[:id])
  end

  def update
    @task = Task.find(params[:id])

    if @task.update(task_params)
      redirect_to [@task.user, @task]
    else
      render 'edit'
    end
  end

  def destroy
    @task = Task.find(params[:id])
    @task.destroy
    respond_to {|format| format.js }
  end

  private

    def task_params
     params.require(:task).permit!
    end
 end

有什么幫助嗎?

試試下面的代碼

<%= form_for [@task.user, @task], method: :put do |f| %>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM