0

私はまだ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  

終わり

4

2 に答える 2

1

Reviews/new.erb は現在、映画の ID を create アクションに渡さないフォームです。そのため、ID がないと映画が見つからないというエラーが表示されます。

非表示のフィールド タグに次の変更を加えてみてください。

<%= f.hidden_field :movie_id, :value => @movie.id %>
于 2013-06-25T12:35:57.443 に答える
0

Review オブジェクトのフォームを追加しましたが、オブジェクトの初期化中に、オブジェクトのすべての属性が空のため、movie_id となります。このエラーが発生しているので、修正するには、作成中にオブジェクトを初期化します。次のコードをコントローラーの新しいアクションに追加するだけです。

def new
    @movie=Movie.find_by_id(params[:movie])
    @review=Review.new({:movie_id => @movie.id})
end

そして閲覧ページでは、

<%= f.hidden_field :movie_id %>

うまくいくことを願っています:)

于 2013-06-25T14:06:53.500 に答える