我有三个模型:“用户”,“出版物”和“主题”。用户和线程是对象,而publication是一个连接(使用has_many:through)。
当用户创建新线程时,线程及其连接(发布)都已成功创建 - 这很好。唯一的问题是,user_id在两者中都是空的。
供参考,我正在使用设计。
以下是我的用户型号:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :confirmable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation,
:remember_me, :username, :profile_image,
:first_name, :last_name
has_many :publications
has_many :threads, :through => :publications
end
以下是我的出版物模型:
class Publication < ActiveRecord::Base
attr_accessible :thread_id, :user_id
belongs_to :thread
belongs_to :user
end
以下是我的主题模型:
class Thread < ActiveRecord::Base
attr_accessible :description, :name, :tag_list, :thumbnail_image, :status, :thread_type, :subtitle, :summary
has_one :publication
has_one :user, :through => :publication
end
以下是我用来创建新主题的表单:
= form_for [@user, @thread] do |f|
- if @thread.errors.any?
#error_explanation
%h2= "#{pluralize(@thread.errors.count, "error")} prohibited this thread from being saved:"
%ul
- @thread.errors.full_messages.each do |msg|
%li= msg
.field
%span Title:
= f.text_field :name
.actions
= f.submit 'Submit'
以下是我在线程控制器中的创建操作:
def create
@user = User.find(params[:user_id])
@thread = @user.threads.new(params[:thread])
@thread.build_publication
end
以下是出版物表:
class CreatePublications < ActiveRecord::Migration
def change
create_table :publications do |t|
t.integer :user_id
t.integer :thread_id
t.timestamps
end
end
end
所有对象都已成功创建,我似乎无法让user_id通过。
答案 0 :(得分:0)
我相信线程控制器的创建操作需要稍微改变一下:
def create
@user = User.find(params[:user_id])
@thread = @user.threads.create(params[:thread])
@thread.build_publication
end
您会注意到该操作的第二行现在使用create
而不是new
。 create
命令将创建一个新线程并保存它。