使用belongs_to / has_many关系创建新对象时无法设置user_id字段

时间:2014-09-17 20:28:12

标签: ruby-on-rails ruby ruby-on-rails-3 postgresql haml

使用rails 3.2&红宝石2.1

这是我的模特

class CheckoutRent < ActiveRecord::Base
  attr_accessible :comment, :rent_id, :user_id
  belongs_to :user
  belongs_to :rent

end

class User < ActiveRecord::Base
  has_many :checkout_rent

  ...
end

我的控制器

class CheckoutRentsController < InheritedResources::Base

  def new
    if user_signed_in?
      @checkout_rent = current_user.checkout_rent.new
      @checkout_rent.save
    else
      redirect_to new_user_session_path, notice: 'Veuillez vous connecter.'
    end
  end
end

我的观点

= form_for(@checkout_rent) do |f|  
  .field
    = f.select :rent_id, Rent.all.collect{|c| [c.user.name, c.id]}  
  .field
    = f.label :comment
    %br/
    = f.text_field :comment
  .actions
    = f.submit

除了在创建新的checkout_rent时未设置user_id时,一切正常。

在控制台中:CheckoutRent.last.user_id返回nil

1 个答案:

答案 0 :(得分:2)

您的用户模型has_many checkout_rent,因此在您的控制器中您应该:

@checkout_rent = current_user.checkout_rents.create

注意复数checkout_rents(因为你现在它应该失败),还要注意create替换new + save,所以你可以删除这一行:

@checkout_rent.save

编辑:

我还建议您修改以下行以遵循约定:

has_many :checkout_rents