我有一个简单的应用程序,可以为电影添加评论(使用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 %>
答案 0 :(得分:1)
我不知道你怎么保存,但你应该有@ movie = Movie.find(..)然后@ movie_review = @ movie.movie_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)