创建属于各自微博和用户的评论(在使用Devise的应用程序中)

时间:2012-01-27 05:43:43

标签: ruby-on-rails

现在,我有两个模型:User和Micropost。 用户模型正在使用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 个答案:

答案 0 :(得分:2)

不,你所说的没有暗示你需要多态关联。您需要的是一个带有如下模式的注释模型:

    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

您可能希望评论的嵌套路线。所以,在您的routes.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书籍,它将指导您完成此任务。