如何相互链接/添加模型

时间:2016-03-30 12:51:37

标签: ruby-on-rails ruby foreign-keys relationship

我正在尝试将idea(s)添加到user。到目前为止,我已将has_many添加到我的用户,并将belongs_to添加到我的想法中。我使用以下方法向用户添加了一个外键:

rails g migration Add_User_id_To_Ideas user_id:integer

现在,当用户创建新想法时,如何将想法分配给特定用户? 我尝试与this example平行工作,但我有点卡住了。

user.rb

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

idea.rb

class Idea < ActiveRecord::Base
  belongs_to :user
  has_many :comments

  mount_uploader :picture, PictureUploader
  # {attr_accessor :Status}
  enum status: [ :Draft, :Published]
end

1 个答案:

答案 0 :(得分:2)

有几种方法可以做到这一点,但我认为最直接的方法是在构思控制器创建操作中保存user_id。

# def create inside ideas_controller
@idea.user_id = current_user.id

if @idea.save
  # etc

其他选项是隐藏字段或before_save回调。这是一个通过隐藏字段的示例。在你的@idea表格中:

<%= f.hidden_field :user_id, value: current_user.id %>

这会将user_id添加到正在保存的参数中。请确保:user_id在想法控制器底部允许的参数中列入白名单。

允许user_id中的idea_params

def idea_params
  params.require(:idea).permit(:user_id, :also_add_other_params)
end