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 

Я попытался тиражирование тот же процесс, и добавление соответственный, но я не знаю, как интегрировать его в шоу действий. Я рассмотрел возможность создания универсальной функции из контроллера приложения, а затем попытался присвоить ее множеству вещей (newb) в функции show, но это кажется сложным.

Я попытался добавить:

@rateable = @article 
@ratings = @rateable.ratings 
@rating = Rating.new 

Это не сработало. Но теперь я имею в виду, она могла бы работать, если я назначу его

@ratings = Article.find(params[:id]} 
@ratings = @rateable.ratings 
@rating = Rating.new 

Даже если это действительно работает, должен быть чист способом сделать это.

Edit:

Ошибка после коррекции с этой строки кода, который идентичен рабочим комментарию версии.

<%= 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

Вы просто хотите, чтобы параметры '@ rateable',' @ ratings' и '@ rating' были доступны в представлении' show'? –

+0

Кроме того, зачем устанавливать '@commentable = @ article' и' @rateable = @ article'? Почему бы просто не обратиться к '@ 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

Спасибо, я обновил ответ, чтобы включить информацию о маршруте. –