[英]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.