ruby-on-rails – 使用belongs_to关联将隐藏字段放入资源表单中的任何方式

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 使用belongs_to关联将隐藏字段放入资源表单中的任何方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在通过编写简单的TODO任务应用程序来学习Rails.
两种型号是:
  1. class List < ActiveRecord::Base
  2. has_many :tasks,:dependent => :destroy
  3. # ...
  4. end
  5.  
  6. class Task < ActiveRecord::Base
  7. belongs_to :list
  8. # ...
  9. end

任务在列表下作为嵌套资源进行路由.因此,当用户创建新任务时,POST消息将发送到/ lists /:list_id / tasks.到目前为止,在Tasks#new view的形式中有

  1. f.hidden_field :list_id,:value => params[:list_id]

但这是一个可怕的解决方案,因为任何人都可以改变隐藏领域的价值.

这里的约定是什么?我应该把类似的东西

  1. @task.list_id = params[:list_id]

在任务#创建动作并摆脱隐藏的字段,或者也许

  1. @task = List.find(params[:list_id]).tasks.new(params[:task])
  2. if @task.save
  3. # ...
  4. end

或者甚至有更好的方式我不知道?

编辑:
是的,那里有similar question,它的答案几乎涵盖了我的问题.如果您有不同的请发布.

解决方法

你是对的 – 那太可怕了.不需要隐藏的字段.像下面这样的东西.

在您的TasksController中:

  1. def new
  2. @list = List.find(params[:list_id])
  3. @task = @list.tasks.build
  4. end
  5.  
  6. def create
  7. @list = List.find(params[:list_id])
  8. @task = @list.tasks.new(params[:task])
  9.  
  10. # etc
  11. end

在Task#new视图中:

  1. <% form_for [@list,@task] ... %>
  2. ...
  3. <% end %>

猜你在找的Ruby相关文章