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 

我試圖複製相同的過程和增加差餉,但我不知道如何將它融入表演動作。我曾考慮從應用程序控制器創建一個通用函數,然後嘗試將它分配給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

您只想在'show'視圖中使用參數'@ rateable','@ ratings'和'@ rating'? –

+0

另外,爲什麼設置'@commentable = @ article'和'@rateable = @ article'?爲什麼不僅僅指「@文章」? –

+0

當我這樣做,我得到'未定義的方法article_ratings_path」' https://github.com/railscasts/154-polymorphic-association-revised/blob/master/blog-after/app/controllers/articles_controller.rb 我非常喜歡這個,不知道如何添加另一個對象。 所以你的第一個問題的答案是肯定的。 – McDoku

回答

1

好吧,想我想通了。只要改變<%= f.submit %>到:

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

在你routes.rb文件,你還需要put '/ratings/create' => 'ratings#create'或者乾脆resources :ratings

這將路線的形式提交給ratings#create我認爲這是你想要的。

+0

這和改變路線包括收視率是一個勝利! – McDoku

+0

謝謝,我更新了包含路線信息的答案。 –