Rails小循环错误

时间:2015-10-07 08:58:20

标签: ruby-on-rails

我有一个有很多优惠的工作模式,用户可以接受或拒绝这些优惠,但是当用户接受优惠时,我怎么能这样做呢?无法创建更多优惠?我尝试以这种方式做到这一点,它工作但它复制输入框。那么我做错了什么,或者我怎么能用另一种方式呢?

#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

1 个答案:

答案 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

如果你描述你希望工作/提议如何运作,我可以创建一个更完整的答案。