Rails接受方法

时间:2015-10-05 09:21:02

标签: ruby-on-rails associations

我希望用户可以接受来自其他用户的优惠,我正在关注来自Product orders between 2 users的@Andy H答案,但我有这个错误,其中包含接受方法的链接:

No route matches {:action=>"accept", :controller=>"offers", :id=>nil, :job_id=>nil} missing required keys: [:id, :job_id]
#my link to accept method
=link_to "Accept this offer", accept_job_offer_path(@offer), method: :post 

这是我的报价控制器:      class OffersController< ApplicationController中

def create
    @job = Job.find(params[:job_id])
    @offer = @job.offers.create(offer_params)
    @offer.user_id = current_user.id

    if @offer.save
        redirect_to @job
    else
        redirect_to :back
    end
end

def accept
    offer = current_user.offers_recived.find(params[:id])
    offer.accept
end

def reject
    offer = current_user.offers_recived.find(params[:id])
    offer.reject
end

private

def offer_params
    params.require(:offer).permit(:pirce_offer, :status, :job_id, :user_id)
end
end

和我的协会:

#user
has_many :jobs_given, class_name: 'Job'
has_many :offers_recived, class_name: 'Offer', through: :jobs_given, source: :offers

has_many :offers_made, class_name: 'Offer'
has_many :jobs_take, class_name: 'Job', through: :offers_made, source: :job

#job
belongs_to :seller, class_name: 'User', foreign_key: :user_id
has_many :offers
has_many :buyers, class_name: 'User', through: :offers

#offer
belongs_to :job
belongs_to :buyer, class_name: 'User', foreign_key: :user_id
has_one :seller, class_name: 'User', through: :job

和我的路线:

  resources :jobs do
   resources :offers do
     member do
       post :accept
       post :reject
     end
   end
end

我做错了什么?谢谢你的帮助!

@edit

我的观点:

  #offers/form
  = simple_form_for([@job, @job.offers.build]) do |f|
    = f.input :pirce_offer
    = f.button :submit

 #offers/offer
 %p= offer.pirce_offer

 =link_to "Accept this offer", accept_job_offer_path(@offer), method: :post 

 #jobs/show
 = render @job.offers

 = render 'offers/form'

1 个答案:

答案 0 :(得分:2)

  

没有路线匹配{:action =>“accept”,:controller =>“offers”,:id => nil,   :job_id => nil}缺少必需的键:[:id,:job_id]

如错误所示,route 缺少必需的密钥 :id:job_id。您没有传递:job_id的值,而@offer传递的:id应为offer

以下应该有效

=link_to "Accept this offer", accept_job_offer_path(offer, offer.job_id), method: :post

=link_to "Accept this offer", accept_job_offer_path(offer, @job), method: :post #if you defined @job in the controller