【问题标题】:Filter for Nested forms - Ruby on Rails过滤嵌套表单 - Ruby on Rails
【发布时间】:2016-05-19 17:23:37
【问题描述】:
在我的 Rails 应用程序中,我有两个模型,分别称为“用户”和“商店”。 An user belongs_to store 和A store has_many users。一个用户有许多属性,如姓名、电子邮件和角色等。在其中一种商店表单中,我想使用嵌套表单来创建角色为 packer 的用户。问题是当我使用嵌套表单时,还会列出其他角色不是“打包者”的用户。我特别想仅对角色为“打包者”的用户使用嵌套表单。有没有办法在嵌套表单中过滤角色为“打包者”的用户
【问题讨论】:
标签:
ruby-on-rails
ruby
ruby-on-rails-4
ruby-on-rails-4.2
【解决方案1】:
首先,您可能想建立一个“捷径”关系:
class Store < ActiveRecord::Base
has_many :users
has_many :packers, -> { where(role: 'packer') }, class_name: 'User'
end
class User < ActiveRecord::Base
belongs_to :store
end
fields_for(record_name, record_object = nil, options = {}, &block) 采用可选的record_object 参数,可让您设置使用的记录:
<%= form_for @store do |f| %>
...
<%= f.fields_for :users, f.object.packers do |user| %>
<%= user.hidden_field :role %>
<%= user.text_field :name %>
<% end %>
...
<% end %>
使用f.object 不是绝对必要的 - 您可以使用任何变量,但它确实更容易构建可重用的部分。