簡體   English   中英

通過自定義方法和form_for遞增模型整數

[英]Incrementing model integer via custom method and form_for

我對Rails非常陌生,因此如果這是一個簡單的問題,我深表歉意。 我正在嘗試建立一個簡單的網站,使用戶可以投票決定他們是否喜歡當天的午餐。 午餐與提供者(餐廳)相關聯,因此提供者將有許多不同的“午餐”。

我知道可以通過將其添加到控制器的方法中來自動遞增(在此處進行更多討論),並且我當前的設置如下所示:

風景:

<%-# Show current like and dislike counts. -%>
<div> Likes: <%= @lunch.liked %> </div>
<div> Dislikes: <%= @lunch.disliked %> </div>


<div>
    <%= form_for :lunch url: lunch_path, method: :put do |f| %>
      <div><%= f.hidden_field :disliked %></div>
      <div><%= f.hidden_field :id %></div>
    <%= f.submit "Disike Lunch", class: "btn btn-large btn-primary" %>
    <% end %>
</div>

控制器:

  def downvote_lunch
    @lunch = Lunch.find(params[:id])
    @lunch.increment!(:disliked)
    redirect_to lunch_path
  end

路線:

 resources :lunches

...

match '/dislike',      to: 'lunches#downvote_lunch',      via: 'get'

但是,當我單擊“不喜歡的按鈕”時,它告訴我沒有“更新”的視圖-我已將update定義為控制器中的空方法,但是我不確定為什么它要訪問update-所有我要尋找的是用更新的“不喜歡的”計數重新加載午餐/:id。

我的問題 :如何使表格指向自定義的“ downvote_lunch”方法,並在成功增加模型中的“不喜歡”整數后將其重定向回Lunches /:id?

為此,你必須做

視野中

 <div>
   <%= form_for :lunch url: downvote_lunch_lunch_path(params[:id]), method: :put do |f| %>
    <div><%= f.hidden_field :disliked %></div>
    <div><%= f.hidden_field :id %></div>
   <%= f.submit "Disike Lunch", class: "btn btn-large btn-primary" %>
  <% end %>
</div>

在路線上

 resources :lunches do
  member do
    put :downvote_lunch
  end
 end

在控制器中

  def downvote_lunch
    @lunch = Lunch.find(params[:id])
    @lunch.increment!(:disliked)
    redirect_to @lunch
  end

它會根據您的需要工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM