这就是事情
我有一个名为Offer
引用的名为OfferDay
的表/类(因为商品在一周的x天提供)
这只是一个非常简单的问题。
是否有用于编辑此类内容的Ruby on Rails约定?
我的Offer
管理员表单应该有7个复选框,为此实例预先填充OfferDays
(或不是)
是的,当然,我可以在我的.erb中循环几周,并检查实例的子集合(天),但是如何自动绑定到postbacK上的实例? - 这似乎是我们以前见过的那种腿法,应该有一个惯例。
是的我用Google搜索了......发现它有点像,但不完全......对于这个有什么特别的?
答案 0 :(得分:1)
我处理has_many
关系:
#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
您可以致电@offer.days
以显示您的优惠所在的日期。它当然会返回一个数字,然后您将使用Date
class或类似的
<强>修改强>
这将允许您为每个优惠分配任意天数(并且每个天都是唯一的)。我这样更新:
#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 %>