簡體   English   中英

Simple_form路徑問題

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

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