将user_ids添加到每篇文章(设计)

时间:2014-12-13 06:52:57

标签: ruby-on-rails devise model

我有一个用户模型:

devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable has_secure_password has_many :articles

我的User架构如下:

create_table "users", force: true do |t| t.string "first_name" t.string "last_name" t.string "email" t.string "password_digest" t.datetime "created_at" t.datetime "updated_at" t.string "reset_password_token" t.datetime "reset_password_sent_at" t.datetime "remember_created_at" t.integer "sign_in_count", default: 0, null: false t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" t.string "current_sign_in_ip" t.string "last_sign_in_ip" end

其中一半来自设计宝石。所以我想要完成的是让每篇文章都分配一个作者(first_name + last_name)。

我的文章模型如下:

belongs_to :topic
belongs_to :user

def author
  "#{self.user_id.first_name} #{self.user_id.last_name}"
end

我在文章控制器中的操作如下:

def create
@article = Article.new(article_params)
@article.user = current_user
if @article.save
  #@article.user = session[:user_id]
  flash[:notice] = "Article has been uploaded"
  redirect_to(:action => "show", :id => @article.id)
else
  flash[:notice] = "Please fill in all fields."
  render("new")
end
end

如果我在展示视图中执行<p><%=@article.author%></p>,则会出现错误,指出未定义的方法 - 'first_name'

如何为每篇文章添加作者。

2 个答案:

答案 0 :(得分:0)

在作者方法中使用self.user.first_name而不是self.user_id.first_name 如果你想在这种情况下使用user_id,那么@ article.user = current_user就可以了 使用@ artilce.user_id = current_user.id

答案 1 :(得分:0)

好的,这就是你如何做到的:

user.rb

has_many :items

article.rb

belongs_to :user

articles_controller.rb

def create
    @article = Article.new(params[:article].permit(:name, ...))
    @article.user_id = current_user.id
    if @article.save  
        flash[:notice] = 'article created'
        redirect_to @article
    else
        render 'new'
    end
end