在同一个Controller中添加评级和评论

时间:2013-11-15 01:46:16

标签: ruby-on-rails mongoid polymorphic-associations rating railscasts

我已经根据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 %>

1 个答案:

答案 0 :(得分:1)

好的,我想我明白了。只需将<%= f.submit %>更改为:

即可
<%= f.submit 'Submit', { controller: 'ratings', action: 'create', method: 'post' } %>

routes.rb文件中,您还需要put '/ratings/create' => 'ratings#create'resources :ratings

这会将您的表单提交到我认为您想要的ratings#create