嵌套模型的新建和创建操作不保存user_id

时间:2013-09-06 02:29:57

标签: mysql ruby-on-rails ruby ruby-on-rails-4 stack-overflow

好吧我有三个型号......用户,收藏品和设计。

我的模特=

用户模型

 `has_many :collections
  has_many :designs, :through => :collections`

收集模型

`belongs_to :user
 has_many: designs`

设计模型

`belongs_to :user
 belongs_to :collection`

好吧,当我尝试创建一个集合时,一切运行良好。所有参数都使用(current_user)保存到DB中,包括与之关联的user_id。

当我尝试创建一个设计(属于一个集合)时,我的问题就出现了。当我创建一个新设计时,user_id没有被存储

这是我的新设计和创建方法的设计控制器

设计控制器:

`def new
   if signed_in? && current_user == @collection.user
     @user = current_user
     @collection = @user.collections.find(params[:collection_id])
     @design = @collection.designs.new
   else
     flash[:error] = "That's not your collection"
     redirect_to root_url
  end
end`

'def create
   @collection = current_user.collections.find(params[:collection_id])
   @design = @collection.designs.new(design_params)

   respond_to do |format|
     if @design.save
       format.html { redirect_to collection_designs_path(@collection), notice: 'Design was successfully created.' }
      format.json { redirect_to collection_designs_path(@collection) }
    else
      format.html { render 'designs/new' }
      format.json { render json: @design.errors, status: :unprocessable_entity }
    end
  end
end`

这是使用(减去字段)

的表单
`<%= form_for [@collection, @design], :html => { :multipart => true, :class => "auth" } do |f| %>
   <fields are here>
 <% end %>`

为了澄清,我可以提交表单和表单工作,并且设计是在附加了collection_id的情况下创建的,但不幸的是user_id没有与它相关联......

1 个答案:

答案 0 :(得分:1)

您尚未将任何用户对象与设计相关联。试试这是设计控制器。 在创建动作中,

设计控制器

def create
   @collection = current_user.collections.find(params[:collection_id])
   @design = @collection.designs.new(design_params)
   @design.user = current_user

   respond_to do |format|
     if @design.save
       format.html { redirect_to collection_designs_path(@collection), notice: 'Design was successfully created.' }
      format.json { redirect_to collection_designs_path(@collection) }
    else
      format.html { render 'designs/new' }
      format.json { render json: @design.errors, status: :unprocessable_entity }
    end
  end
end`