Ruby on rails Clean Rails是一种通过复选框链接子集合的方法

Ruby on rails Clean Rails是一种通过复选框链接子集合的方法,ruby-on-rails,rails-activerecord,has-many,Ruby On Rails,Rails Activerecord,Has Many,这就是问题所在 我有一个名为Offer 以及名为OfferDay的参考表/类(因为一周中的x天提供优惠) 这只是一个非常简单的问题 是否有RubyonRails的惯例来编辑这样的东西 我的Offer管理表单应该有7个复选框,对于此实例(或不包括此实例),它们的前缀应该是OfferDays 当然可以,我可以在my.erb中循环一周中的几天,并检查实例的子集合(天),但是回发时自动绑定到实例呢这似乎是我们都见过的那种跑腿活动,应该有一个惯例 是的,我在谷歌上搜索过。。。找到了一些,但不完全是。。。有

这就是问题所在

我有一个名为
Offer

以及名为
OfferDay
的参考表/类(因为一周中的x天提供优惠)

这只是一个非常简单的问题

是否有RubyonRails的惯例来编辑这样的东西

我的
Offer
管理表单应该有7个复选框,对于此实例(或不包括此实例),它们的前缀应该是
OfferDays

当然可以,我可以在my.erb中循环一周中的几天,并检查实例的子集合(天),但是回发时自动绑定到实例呢这似乎是我们都见过的那种跑腿活动,应该有一个惯例

是的,我在谷歌上搜索过。。。找到了一些,但不完全是。。。有什么特别的吗?

我会用关系来处理它:

#app/models/offer.rb
Class Offer < ActiveRecord::Base
   has_many :days, -> { select(:day_id) }, class_name: "OfferDay", foreign_key: "offer_id"
   accepts_nested_attributes_for :days
end

Class OfferDay < ActiveRecord::Base
   belongs_to :offer
end

offer_days
id | offer_id | day_id #-> put indexes on day_id & offer_id

这是一个相当模糊的问题——很难回答。它也主要是基于意见,这意味着它将引发接近票数的投票。我会考虑向我们展示你的代码,让我们帮助我们找到更好的解决方案。谢谢你的详细回复。但形式不正确。如果我们有5天的时间或者已经填写了,我们来编辑,我们会看到35(7x5)个复选框。同样,对于新记录,我们根本看不到任何复选框。感谢您的反馈-您希望我为您编辑它吗?我看你已经编辑了答案(不知道你是否自己修复了!)只是在做一些感觉有点粗糙但可能有用的事情-在第一次迭代
f.fields:days
之后返回-但这并不能解决新的记录问题闻起来太难闻,所以最后,我使用了循环和复选框标记以及一些(传统的)在控制器中自定义处理子记录…但感谢我从帖子中了解到
#app/controllers/offers_controller.rb
def new
   @offer = Offer.new
   @offer.days.build
end

def create
   @offer = Offer.new(offer_params)
   @offer.save
end

private

def offer_params
    params.require(:offer).permit(:offer, :attributes, days_attributes: [:day_id])
end

#app/views/offers/new.html.erb
<%= form_for @offer do |f| %>
   <%= f.text_field :offer %>
   <%= f.text_field :attributes %>
   <%= f.fields_for :days do |builder| %>
       <% 7.times do |day| %>
          <%= builder.check_box :day_id, day %> #-> need label for each day
       <% end %>
   <% end %>
<% end %>