我对Rails非常陌生,所以如果这是一个简单的问题我会道歉。我正在尝试建立一个简单的网站,允许用户投票,因为他们是否喜欢那天的午餐。午餐与提供者(餐馆)相关联,因此提供者将有许多不同的“午餐”。
我知道可以通过将其添加到控制器(discussed more here)中的方法来自动增加,并且我当前的设置如下所示:
观点:
<%-# 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'
但是,当我点击“不喜欢按钮”时,它告诉我没有“更新”视图 - 我已将更新定义为控制器中的空方法,但我不确定为什么它会访问更新 - 我正在寻找的是重新加载午餐/:id以及“不喜欢”的更新计数。
我的问题:如何让表单指向自定义的“downvote_lunch”方法,并在成功递增“dislikes”整数后将其重定向回lunches /:id模型?
答案 0 :(得分:0)
你必须这样做
在视图中
<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
它会按你的意愿工作