Создание комментариев, которые принадлежат их соответствующим микросообщениям и пользователям (в приложении, использующем Devise) - PullRequest
0 голосов
/ 27 января 2012

Прямо сейчас у меня есть две модели: Пользователь и Микросообщение.Модель User работает с Devise .

Пример используемых файлов:

user_controller.html.erb:

class PagesController < ApplicationController
  def index
    @user = current_user
    @microposts = @user.microposts
  end
end

index.html.erb:

<h2>Pages index</h2>
<p>email <%= @user.email %></p>
<p>microposts <%= render @microposts %></p>

микросообщений / _micropost.html.erb

<p><%= micropost.content %></p>

micropost.rb:

class Micropost < ActiveRecord::Base
  attr_accessible :content

  belongs_to :user
end

user.rg:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me

  has_many :microposts
end

Теперь я хочу создать комментарии для микросообщений:

  • Каждый комментарий должен принадлежать соответствующему микросообщению и пользователю (комментатору).Не уверен, как это сделать (это хорошая ситуация для использования полиморфных ассоциаций ?).
  • У пользователя должно быть много микросообщений и комментариев (также не уверен, как это сделать).
  • Я понятия не имею, как сделать так, чтобы комментарий был сделан для пользователя, который в данный момент вошел в систему (я думаю, что я должен что-то сделать с Devise current_user).

Какие-либо предложения для достижения этой цели?(Извините, я новичок в Rails)

1 Ответ

2 голосов
/ 27 января 2012

Нет, ничего из того, что вы сказали, не говорит о том, что вам нужны полиморфные ассоциации.Вам нужна модель комментариев со схемой, похожей на следующую:

    create_table :comments do |t|
        t.text :comment, :null => false
        t.references :microposts
        t.references :user
        t.timestamps
    end

А затем

# user.rb
has_many :microposts
has_many :comments

# microposts.rb
has_many :comments

Возможно, вам понадобятся вложенные маршруты для ваших комментариев.Итак, в вашем rout.rb у вас будет что-то вроде

#routes.rb
resources :microposts do
    resources :comments
end

.. и в вашем контроллере комментариев, да, вы присвоите значение comment.user что-то вроде следующего ...

# comments_controller.rb
def create
    @comment = Comment.new(params[:comment])
    @comment.user = current_user
    @comment.save ....
end

Возможно, вы захотите взглянуть на книгу Beginning Rails 3, которая поможет вам пройти через это.

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