【问题标题】:how to obtain a subset of records for a grouped_collection_select in Rails如何在 Rails 中获取 grouped_collection_select 的记录子集
【发布时间】:2016-04-16 18:57:24
【问题描述】:

我正在尝试获取 grouped_collection_select 的记录子集,在模式中我有一个品牌和一个型号,我们处理不同的产品线,当我们请求产品时,我们指定我们要去的线请求,所以,我们可以有品牌,以及该行的模型,所以模型定义如下:

品牌模型

class Brand < ActiveRecord::Base
  validates :brand_key, uniqueness: true, presence:true
  has_many :models
  accepts_nested_attributes_for :models, allow_destroy: true
end

Modelx 的模型

class Modelx < ActiveRecord::Base
  belongs_to :brand
  belongs_to :line
  validates :model_key, uniqueness: true, presence:true
end

线型

class Line < ActiveRecord::Base
  validates :line_key, uniqueness: true, presence:true, length: {in: 1..6}
  has_many :line_features, -> { order(:sort_order) }
  has_many :modelx
  accepts_nested_attributes_for :line_features, allow_destroy: true
end

产品型号

class Product < ActiveRecord::Base
  belongs_to :vendor
  belongs_to :line
  belongs_to :brand
  belongs_to :modelx
  belongs_to :operating_status
  has_many :line_features, -> { order(:sort_order)}

  store_accessor :line_features
end

产品控制器(新)

def new
  @brands=brand.where(id: Modelx.select(:brand_id).where(line_id: params[:line_id]))
  @modelxs=Modelx.where(line_id: params[:line_id])
  ...
end

部分形式的摘录

<%= f.collection_select( :brand_id, @brands, :id, :brand,{:prompt =>'Brands'}) %>
<%= f.grouped_collection_select(:modelx_id, @brands, :modelx, :brand, :id, :modelox) %>

现在,我面临的问题是,当我展示模型时,我只需要展示可用于该品牌和产品线的模型,但是,请求是提供该品牌的所有模型,因为它应该是而且我不知道如何区分那些不需要的行。

非常感谢任何帮助、提示或建议。

更新问题

我不知道这是解决方法还是问题的解决方案,但是,这是我找到的解决要求的唯一方法,因此我将其作为更新发布回答可能对谁有帮助的问题。

  1. 再次查看文档,发现&lt;%= f.grouped_collection_select(:modelx_id, @brands, :modelx, :brand, :id, :modelox) %&gt;引用的方法:modelx请求apidock中提到的所有模型,该方法是解决问题的方法。

  2. 根据上面描述的子集在品牌模型中创建了一个方法,由于分组是按品牌进行的,这里摘录

品牌模型(摘录)

  ...
  def modelx_ltvi
    Modelx.where("line_id = ? and brand_id =?",$line_id, self.id)
  end

特别注意:由于我没有经验,我无法从表单中传递 :line_id 的值,所以我把它放在了一个全局变量中.

  1. 修改了部分表单

摘自部分形式

 ...
<%  $line_id=@product.line_id %> 
 ...
<%= f.grouped_collection_select(:modelx_id,
      @brands, :modelx_ltvi, :brand, 
      :id, :modelx) %>
  <% end %>

这会让仓鼠跑起来。

【问题讨论】:

    标签: ruby-on-rails grouped-collection-select


    【解决方案1】:

    按您刚刚找到的品牌过滤您的模型,例如:

    @brands=Brand.where(id: Modelx.select(:brand_id).where(line_id: params[:line_id]))
    @modelxs=Modelx.where(line_id: params[:line_id], brand_id:  @brands.map(&:id))
    @selected_model_names = @modelxs.map(&:name).sort.uniq
    

    【讨论】:

    • 感谢您的友好建议,但是,我面临的问题是分组集合选择的模型选择器没有过滤那些不属于该行的字段,显然,我'不明白的东西,我应用了你的建议,但是,行为保持不变。
    猜你喜欢
    • 1970-01-01
    • 2017-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多