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 %>