Ruby on rails Rails方法工作错误
我正在开发我的应用程序,用户可以接受或拒绝其他用户提供的服务,但出现了一些问题,因为当我创建了5份工作邀请,并尝试拒绝或接受第三份工作邀请时,第一份工作邀请的状态发生了变化,我不知道发生了什么?我关注这个话题,所以也许我理解错了什么?请帮帮我 我的模型:Ruby on rails Rails方法工作错误,ruby-on-rails,Ruby On Rails,我正在开发我的应用程序,用户可以接受或拒绝其他用户提供的服务,但出现了一些问题,因为当我创建了5份工作邀请,并尝试拒绝或接受第三份工作邀请时,第一份工作邀请的状态发生了变化,我不知道发生了什么?我关注这个话题,所以也许我理解错了什么?请帮帮我 我的模型: #user has_many :jobs_given, class_name: 'Job' has_many :offers_recived, class_name: 'Offer', through: :jobs_given, source:
#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
def accept
self.status = true
save
end
def reject
self.status = false
save
end
我的控制器:
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
flash[:success] = "Offer accepted!"
redirect_to :back
end
def reject
offer = current_user.offers_recived.find(params[:id])
flash[:notice] = "Offer rejected!"
offer.reject
redirect_to :back
end
private
def offer_params
params.require(:offer).permit(:pirce_offer, :status, :job_id, :user_id)
end
end
我的看法是:
#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, @job), method: :post
= link_to "Reject this offer", reject_job_offer_path(offer, @job), method: :post
#jobs/show
= render @job.offers
= render 'offers/form'
@编辑
假设您已将资源嵌套在
:offer
下,嵌套在:jobs
下,则在的“接受此offer”
和的“拒绝此offer”
链接中,路径错误
这意味着您正在以params[:job\u id]
的形式发送报价的id(除非它还没有id,因为您刚刚构建了它),然后params[:id]
是@job
的id。这就是为什么它更新了错误的报价-这是因为它正在使用与@job
匹配的id更新报价
如果你只是在表单中创建了一个offer,那么如何通过id找到它可能是下一步工作。假设你将资源嵌套在
:jobs
下:offers嵌套在:jobs
下,你的“接受此offer”
和“拒绝此offer”中的路径是错误的
链接
这意味着您正在以params[:job\u id]
的形式发送报价的id(除非它还没有id,因为您刚刚构建了它),然后params[:id]
是@job
的id。这就是为什么它更新了错误的报价-这是因为它正在使用与@job
匹配的id更新报价
如果你只是在表单中创建了一个id,那么你将如何找到它,这可能是下一步
更改第一个报价的状态
永远记住,在计算中,如果某些东西不能正常工作,那是你的错
系统是非常通用和灵活的,除非你有系统性的问题,否则没有理由不工作
ID 问题几乎肯定与您要传递的
id
有关:
"job_id"=>"5", "id"=>"1"
我不知道您的数据是什么样子的,但这是通过链接到创建的:
= link_to "Accept this offer", accept_job_offer_path(offer, @job), method: :post
您的accept\u job\u offer\u path
将-IMO-分别将参数设置为[:job\u id]
和[:(offer)id]
。你把他们送到另一个地方
试试这个:
= link_to "Accept this offer", accept_job_offer_path(@job, offer), method: :post
= link_to "Reject this offer", reject_job_offer_path(@job, offer), method: :post
这是假设您的数据结构是正确的
数据 我还看到一些其他问题:
current_user.offers_recived.find(params[:id])
您正在呼叫当前用户。收到的工作机会
,但未指明收到工作机会的工作。你肯定想把这份工作也包括进来
此外,您还可以让自己的行为干涸一点:
#config/routes.rb
resources :jobs do
match :offer, action: :update, via: [:post, :delete] #-> url.com/jobs/:job_id/offer
end
#app/controllers/jobs_controller.rb
class JobsController < ApplicationController
def offer
@job = Job.find params[:job_id]
offer = current_user.offers_recived.find(params[:id])
offer.accept
if request.post?
offer.accept
elseif request.delete?
offer.reject
end
end
end
#config/routes.rb
资源:工作做什么
匹配:offer,action::update,via:[:post,:delete]#->url.com/jobs/:job\u id/offer
结束
#app/controllers/jobs\u controller.rb
类JobsController
更改第一个报价的状态
永远记住,在计算中,如果某些东西不能正常工作,那是你的错
系统是非常通用和灵活的,除非你有系统性的问题,否则没有理由不工作
ID 问题几乎肯定与您要传递的
id
有关:
"job_id"=>"5", "id"=>"1"
我不知道您的数据是什么样子的,但这是通过链接到创建的:
= link_to "Accept this offer", accept_job_offer_path(offer, @job), method: :post
您的accept\u job\u offer\u path
将-IMO-分别将参数设置为[:job\u id]
和[:(offer)id]
。你把他们送到另一个地方
试试这个:
= link_to "Accept this offer", accept_job_offer_path(@job, offer), method: :post
= link_to "Reject this offer", reject_job_offer_path(@job, offer), method: :post
这是假设您的数据结构是正确的
数据 我还看到一些其他问题:
current_user.offers_recived.find(params[:id])
您正在呼叫当前用户。收到的工作机会
,但未指明收到工作机会的工作。你肯定想把这份工作也包括进来
此外,您还可以让自己的行为干涸一点:
#config/routes.rb
resources :jobs do
match :offer, action: :update, via: [:post, :delete] #-> url.com/jobs/:job_id/offer
end
#app/controllers/jobs_controller.rb
class JobsController < ApplicationController
def offer
@job = Job.find params[:job_id]
offer = current_user.offers_recived.find(params[:id])
offer.accept
if request.post?
offer.accept
elseif request.delete?
offer.reject
end
end
end
#config/routes.rb
资源:工作做什么
匹配:offer,action::update,via:[:post,:delete]#->url.com/jobs/:job\u id/offer
结束
#app/controllers/jobs\u controller.rb
类JobsController
看来您还有一些调试要做。什么params
到达您的accept
方法?是什么产生了它们?等等。我把它添加到我的问题中。好吧,看来你要做一些调试。什么params
到达您的accept
方法?是什么产生了它们?等等。我把它添加到我的问题中