我有一个有很多优惠的工作模式,用户可以接受或拒绝这些优惠,但是当用户接受优惠时,我怎么能这样做呢?无法创建更多优惠?我尝试以这种方式做到这一点,它工作但它复制输入框。那么我做错了什么,或者我怎么能用另一种方式呢?
#show.html.haml
- if @job.offers.blank?
= render 'offers/form'
- @job.offers.each do |f|
- if @job.offers.find(f).status == false || @job.offers.find(f).status == nil
= render 'offers/form'
- else
cannot do that
#offers/_form.html.haml
= simple_form_for([@job, @job.offers.build]) do |f|
= f.input :pirce_offer
= f.button :submit
答案 0 :(得分:1)
你需要将自己与scoping in programming等同起来;每当你创建一个"块"在Ruby中,它实际上就像调用一个函数一样its own local scope:
- @job.offers.each do |f|
- if f.status == false || f.status == nil
= render 'offers/form'
- else
cannot do that
除此之外,我没有达到调用构建新优惠的表单的目的吗?
您正在循环查看作业,使用状态条件来确定用户是否应该创建商品....但是,当然,如果商品存在,用户已经发布了优惠?
此外,您还在使用表单的全新数据集:
= simple_form_for([@job, @job.offers.build]) do |f|
= f.input :pirce_offer
= f.button :submit
你不应该使用以下内容:
= simple_form_for([@job, f]) do |f|
= f.input :pirce_offer
= f.button :submit
好的,我明白了 - 你有一种"拍卖"接受/拒绝要约的制度。如果前一个被拒绝,这将使你能够提出新的报价...........它仍然是粗略的地狱。
当用户接受优惠时,我怎么能这样做,无法创建更多优惠
您需要在视图和模型中使用一些验证。
这样的事情:
#app/models/offer.rb
class Offer < ActiveRecord::Base
validates :user_id, uniqueness: { scope: :job, message: "Only one offer per job" }
end
如果你描述你希望工作/提议如何运作,我可以创建一个更完整的答案。