铁轨上的红宝石.从一个链接更新不同的模型



我需要同时更改两个不同模型的属性。我有一个gig模型。演出has_many requests我有一个表单可以将gig的状态更改为filled,同时我想将该演出请求的状态更改为"拒绝"。(尚未具有"已雇用"状态的)

请求已status: string

吉格有filled: boolean

请求模型:

scope :nothired, -> { where.not(status: 'hired') }

请求控制器:

def reject
  @request = Request.find(params[:id])
      @request.update(status: "reject")
      @request.save
      UserMailer.reject_notification(@request).deliver
      redirect_to gig_requests_path
      flash[:notice] = "MARKED AS REJECTED"
end

视图:

<%= simple_form_for @gig, :method => "put" do |t| %>
<% @gig.requests.nothired.each do |request| %>
<%= t.hidden_field :filled, :value => true %>
<%= t.submit t('dash.filltitle'), data: { confirm: "Are you sure?" }, class: "fill-gig-btn"  %>
<% end %>
<% end %>

现在我不确定如何格式化它以包含requests控制器操作。

我尝试通过隐藏字段传递requests reject操作(拒绝操作在控制器中并且有效):

 <%= t.hidden_field { controller: "requests", action: "reject", id: request.id }, method: :post %>

但这给出了:

undefined method `{:url=>{:action=>"reject", :controller=>"requests", :id=>53}, :method=>:post}' for #<Gig:0x0055ef27d98cc8>

关于如何实现这一目标的任何建议将不胜感激,谢谢。

您可以在 Gig 控制器中执行此操作。

因此,在 gig#update 操作中,您可以使用如下所示将所有子请求设置为"拒绝":

@gig.requests.each do |request|
  request.update_attributes(status: 'reject')
end

您希望确保仅在成功更新@gig时才触发此操作。

因此,使用回调从您的 Gig 模型处理此问题可能会更优雅

相关内容

  • 没有找到相关文章

最新更新