[英]Simple_form path issue
這是我的看法:
<%= simple_form_for :artist, :url => url_for(:action => 'upvote', :controller => 'artists'),
:method => 'post' do |f| %>
<%= f.input :choose_an_artist, :selected => "first artist", collection: [["first artist", 1], ["second artist", 2], ["third artist", 3], ["fourth artist", 4]] %>
<%= f.submit "Vote" %>
<% end %>
我的ArtistsController:
def upvote
@artist = Artist.find(params[:choose_an_artist])
@artist.liked_by current_user
respond_to do |format|
format.html {redirect_to :back }
end
end
routes.rb中:
resources :artists do
member do
put "like", to: "artists#upvote"
end
end
我收到以下錯誤:
No route matches {:action=>"upvote", :controller=>"artists"}
是什么原因造成的? 我如何使它起作用,以便用戶可以從收藏集中選擇一個藝術家並投票給該藝術家?
您的代碼中存在幾個問題:
首先,您將路由定義為PUT
,並強制simple_form
生成POST
表單。 在您的視圖中將method: :post
更改為method: :put
,您應該已經准備就緒。
其次,您需要根據控制器和動作名稱定義路線:
resources :artists do
member do
put :upvote
end
end
第三,您將路線定義為on: :member
。 這意味着它需要artist_id
才能生成。 在您的設置中,您需要on: :collection
定義路由。 我也最好使用route path方法而不是url_for
,它更容易發現此錯誤。
resources :artists do
collection do
put :upvote
end
end
並將url_for
部分更改為update_artists_path
(如果這是來自rake routes
的正確rake routes
)。
與您的問題無關的另一個問題:choose_an_artist
不是在Artist
模型中定義的屬性。 呈現表單時,這將導致另一個錯誤。
我可以根據您選擇的實際屬性名稱重命名該名稱:id
並相應地更改控制器(我的選擇),或者將表單幫助程序從f.input
更改為與模型無關的select_tag
並保持名稱不變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.