我有3个对象:用户,旅行,积分。
用户有很多旅行,旅行有很多点,一个点属于一个旅行用户。
旅行还有一个布尔属性(:open),告诉它是否在诅咒中。
问题是我无法在点数表中保存当前旅行的“travel_id”。
以下是代码:
class Point < ActiveRecord::Base
belongs_to :travel, :foreign_key=> "travel_id"
belongs_to :user, :foreign_key=> "user_id"
end
class Travel < ActiveRecord::Base
has_one :user, :foreign_key => "user_id"
has_many :ways
has_many :points
attr_accessible :description, :start_date, :last_date
validates_date :last_date, :on_or_after => :start_date
end
积分控制器:
...
def create
@point = Point.new(params[:point])
@point.user_id = current_user.id
@travel = current_user.travels.find(:all, :conditions => {:open => true})
@point.travel_id = @travel.id
respond_to do |format|
if @point.save
format.html { redirect_to(@point, :notice => 'Point was successfully created.') }
format.xml { render :xml => @point, :status => :created, :location => @point }
else
format.html { render :action => "new" }
format.xml { render :xml => @point.errors, :status => :unprocessable_entity }
end
end
end
...
每当我尝试保存新点时,@ point.travel_id = -614747648
答案 0 :(得分:0)
有些事情可以解决这里。
首先,当密钥与关系名称+ :foreign_key
完全相同时,您无需指定_id
。
其次,您不需要(通常不应该)直接设置foo_id
字段;做@point.user = current_user
更常见。
第三,问题的直接原因是@travel
已被设置为find(:all, ...)
调用的结果 - 所以它是{{1> {{1}对象。您保存到Travel
的内容将是Ruby的@point.travel_id
数组的内部标识,而不是单行的数据库标识。