0

我已经获得了一个基于 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

我曾尝试复制相同的过程并添加 rateable,但我不知道如何将其集成到 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 %>
4

1 回答 1

1

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

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

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

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

于 2013-11-15T08:38:52.577 回答