私はまだRuby on Railsのロープを学んでおり、この質問は簡単かもしれませんが、しばらくの間私を悩ませています環境:ubuntuでrails 3.2、ruby 1.9私はrails.eでrubyを学ぶための小さなレビューアプリを構築しています新しいレビューを保存する webpage reviews/new.erb。上部に映画の名前が表示されます。
reviews/new.erb はこんな感じ
<h3><%= @movie.name %></h3>
<%= form_for @review do |f| %>
<%= render "shared/error_messages", :target => @review %>
<%= f.hidden_field :movie_id %>
<%= f.label :rating, "Rate the movie" %>
<%= f.select :rating,['1','2','3','4'] %>
<%= f.label :review, "Your 140 character review" %>
<%= f.text_area :review %>
<%= f.submit "Fire", :disable_with => 'Submitting...' %>
<% end %>
new および create のコントローラーメソッドは次のとおりです。
def new
@movie=Movie.find(params[:movie])
@review=Review.new
end
def create
@user=current_user
@review=Review.create params[:review]
@review.user_id=@user.id
@review.movie_id=params[:movie_id]
@movie=Movie.find(params[:movie_id])
if @review.save
flash[:notice] = 'Movie was successfully created.'
redirect_to :controller => "movies",:action => "show",:id => @review.movie_id
else
redirect_to :action => "new", :movie => @movie
end
end
new.erb で検証エラー メッセージを表示しようとすると、このエラーが発生します
Couldn't find Movie without an ID
Rails.root: /home/Development/ohmyroots
Application Trace | Framework Trace | Full Trace
app/controllers/reviews_controller.rb:14:in `create'
混合コンテンツを持たない映画を追加するための私の他のフォームは正常に機能しています。これを修正するための提案をいただければ幸いです。ありがとうございます。
ビューに検証を表示するために動的フォームジェムを使用しています
更新:私の新しい作成方法
def create
@review=Review.create(params[:review])
@user=current_user
@review.user_id=@user.id
@review.movie_id=params[:movie_id]
@review.rating=params[:rating]
@review.review=params[:review]
if @review.save
flash[:notice] = 'Movie was successfully created.'
redirect_to :controller => "movies",:action => "show",:id => @review.movie_id
else
@movie=Movie.find(params[:movie_id])
render :action => "new",:movie => @movie
end
終わり