Показать все сообщения одного пользователя в RAILS - PullRequest
1 голос
/ 24 ноября 2011

Я довольно новичок в рельсах и пытаюсь отобразить все сообщения, сделанные пользователем в моем приложении. Я просматривал подобные сообщения в этом форуме, но безуспешно.Я создал некоторые леса с атрибутами name, title и content, а затем создал модель Blogger с атрибутом name.

Вот мой код

Контроллер

class BloggersController < ApplicationController

  def show
    @blogger = blogger.find(params[:id])
    @title = @blogger.name
    @posts = @blogger.posts
    respond_with(@posts)
  end
end

Просмотр

Index.html.erb

<% @blogger.post.each do |post| %>
  post.name
  # Comments to the Post
  post.comments.each do |comment|
    comment.comments
 <% end %>

Модель

class Post < ActiveRecord::Base
  validates :name, :presence=>true
  validates :title, :presence=>true
  has_many :comments
  belongs_to :blogger
  belongs_to :topic,    :touch => true
  accepts_nested_attributes_for :blogger
  attr_accessible :name, :title, :content
end

Я получаю сообщение об ошибке «NoMethodError in Posts # index», в котором говорится

неопределенный метод `post 'для nil: NilClass и имееткод для index.htm.erb в извлеченном источнике

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011

не ответ, а всего лишь несколько рекомендаций:

в коде ваших вопросов много ошибок.

@blogger = blogger.find(params[:id])

я думаю, что так и должно бытьизменилось на

@blogger = Blogger.find(params[:id])

, затем создайте

raise @blogger.inspect

и посмотрите, загружено ли оно.

и, на ваш взгляд, вы можете сделать это лучше: (кстати: itнужно вызвать show.html.erb, а не index.html.erb, если у вас есть метод show)

#show html.erb

<%=render @blogger.posts %>

, а затем вы создаете файл в posts / _post.html.erb

<%= post.name %>
<%= render post.comments %>

и файл comments/_comment.html.erb, в котором вы оставляете комментарий.

это рельс способ быть СУХИМ!

0 голосов
/ 24 ноября 2011

Ошибка, которую вы ищете, является простой опечаткой, по вашему мнению, вы должны написать

@blogger.posts.each

вместо

@blogger.post.each

Надеюсь, это поможет.

0 голосов
/ 24 ноября 2011

Может быть, потому что вы поместили этот код в index.html.erb Итак, когда вы пытаетесь отобразить эту HTML-страницу, rails будет пытаться вызвать метод index в контроллере, но у вас нет метода с именем index.Попробуйте поместить этот код в метод с именем index / или попробуйте изменить имя файла html.erb на show.html.erb

РЕДАКТИРОВАТЬ: Итак, в вашем коде вы передаете переменную @posts, ноВаше мнение вы назвали @ blogger.post.Это не должно быть решено.Вы должны выбрать между передачей @blogger или @posts вашему представлению и использовать только атрибуты переменной, которую вы передали представлению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...