【问题标题】:Ruby on Rails 4 Can't get form_for working with nested routesRuby on Rails 4 无法使用嵌套路由获取 form_for
【发布时间】:2015-07-15 16:59:30
【问题描述】:

我正在尝试使用嵌套路由执行 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 %>

rake 路线

 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”

tasks_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 是否存在并且有用户关联到它。?
  • @Athat 是的,它工作得很好。非常感谢。
  • @Athat 抱歉,我想问点别的。括号中这条路径的等效形式是什么?
  • 我不是 100% 确定,但我猜这个可以工作 user_task_path(@task.user, @task)

标签: ruby-on-rails ruby form-for nested-form-for


【解决方案1】:

试试下面的代码

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

【讨论】:

  • 请问括号中这条路径的等效形式是什么?
猜你喜欢
  • 1970-01-01
  • 2018-12-28
  • 2011-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多