我已经根据railscast 238获得了一个评论模型,但我想添加投票和评分。
我目前对文章控制器的展示是:
def show
@article = Article.find(params[:id])
@commentable = @article
@comments = @commentable.comments
@comment = Comment.new
respond_to do |format|
format.html # show.html.erb
format.json { render json: @article }
end
end
我尝试复制相同的过程并添加有价值的但我不知道如何将它集成到show动作中。我考虑过从应用程序控制器创建一个通用函数,然后尝试将它分配给show函数中的多个东西(newb),但这似乎过于复杂。
我尝试添加:
@rateable = @article
@ratings = @rateable.ratings
@rating = Rating.new
它不起作用。但是现在我认为如果我把它分配给
它可能会有用@ratings = Article.find(params[:id]}
@ratings = @rateable.ratings
@rating = Rating.new
即使这确实有效,也必须有更清洁的方法来做到这一点。
编辑:
从此行代码更正后出错,这与工作评论版本相同。
<%= form_for [@rateable, @rating] do |f| %>
<% if @rating.errors.any? %>
<div class="error_messages">
<h2>Please correct the following errors.</h2>
<ul>
<% @rating.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.text_area :content, rows: 8 %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
答案 0 :(得分:1)
好的,我想我明白了。只需将<%= f.submit %>
更改为:
<%= f.submit 'Submit', { controller: 'ratings', action: 'create', method: 'post' } %>
在routes.rb
文件中,您还需要put '/ratings/create' => 'ratings#create'
或resources :ratings
这会将您的表单提交到我认为您想要的ratings#create
。