筛选嵌套表单 - Ruby on Rails

时间:2016-05-19 08:52:35

标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-4.2

在我的rails应用程序中,我有两个名为'user'和'store'的模型。 An user belongs_to storeA store has_many users。用户拥有许多属性,如姓名,电子邮件和角色等。在其中一种商店表单中,我想使用嵌套表单来创建角色为打包器的用户。问题是,当我使用嵌套表单时,还会列出其角色不是“打包器”的其他用户。我特别希望仅为角色为“packer”的用户使用嵌套表单。有没有办法过滤用嵌套形式的“打包者”角色的用户

1 个答案:

答案 0 :(得分:0)

首先,您可能需要设置“捷径”关系:

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并非绝对必要 - 您可以使用任何变量,但它确实可以更容易地构建可重用的部分。