У меня есть модель комментариев для работы на основе 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 %>
Вы просто хотите, чтобы параметры '@ rateable',' @ ratings' и '@ rating' были доступны в представлении' show'? –
Кроме того, зачем устанавливать '@commentable = @ article' и' @rateable = @ article'? Почему бы просто не обратиться к '@ article'? –
Когда я делаю это я получаю 'неопределенный метод article_ratings_path» ' https://github.com/railscasts/154-polymorphic-association-revised/blob/master/blog-after/app/controllers/articles_controller.rb Я в значительной степени избегаю этого и не знаю, как добавить еще один объект в микс. Итак, ответ на ваш первый вопрос - да. – McDoku