表单输出未显示

时间:2014-02-17 19:16:20

标签: ruby-on-rails ruby-on-rails-4

我有一个简单的应用程序,可以为电影添加评论(使用TMDb API)。问题是,当我尝试保存评论时,我没有在电影显示页面上看到它。我和其他应用程序发生了这种情况 - 某些字段输出未显示在显示页面上。

控制器

def show
  @movie = Tmdb::Movie.detail(params[:id])
   ...
  @movie_reviews = MovieReview.where(movie_id: params[:id])
end

显示

<% @movie_reviews.each do |movie_review| %>
  <%= movie_review.title %>
  <%= movie_review.content %>    
<% end %>

表格

<%= form_for :movie_review, url: movie_movie_reviews_path(params[:movie_id]) do |f| %>

<p>
  <%= f.label :title %><br>
  <%= f.text_field :title %>
</p>

<p>
  <%= f.label :content %><br>
  <%= f.text_area :content %>
</p>
<%= f.submit %>
<% end %>

1 个答案:

答案 0 :(得分:1)

我不知道你怎么保存,但你应该有@ movie = Movie.find(..)然后@ movie_review = @ movie.movi​​e_reviews.create(params)

这意味着您可能需要在表单中为movie_id设置隐藏字段,或在呈现表单之前指定它。

修改 您正在传递表单操作URL,如下所示:

movie_movie_reviews_path(params[:movie_id])

发布评论索引路径是create的正确操作,但您仍需要告诉控制器您要说的内容。所以,你应该这样做:

movie_movie_reviews_path

然后,在您的表单中,添加要进行审核的电影的ID:

<%= form_for...
<%= f.hidden_field :movie_id, :value => @movie.id %>

那么,你现在将有一个param映射movie_reid的movie_id(@movie来自控制器,还记得吗?)

最后,在create行动中:

要么a)你允许:movie_review_params中的movie_id并且不做任何其他事情

def movie_review_params
  params.require(:movie_review).permit(:title, :content, :movie_id)
end

b)或者您不接触movie_review_params而不是:

@movie_review = MovieReview.new(movie_review_params)

DO

@movie_review = Movie.find(params[:movie_id]).movie_reviews.new(movie_review_params)