2010-01-31 31 views
3

目前,在我的要求我的模型有:实习空字符串错误

belongs_to :requestor, :class_name => 'User' 

所以请求者是CURRENT_USER。

问题是当current_user点击创建按钮为请求提交表单时,所有属性都会更新到表单中的数据库。
但由于requestor_id不是填写在表单中的值,因此创建新的请求记录时会在数据库中返回空值。
我想要的是当用户单击创建按钮时,在请求表中的requestor_id列中更新的整数(相当于Users表的主键)。
所以我想,也许增加一个requestor_id作为PARAMS为创建动作的符号会解决:

def create_common 
    @a = Request.new 
    b = @a.requestor_id 
    @resource = yield params[:contact + "#{b}".to_sym] 
    self.resource = @resource 

而是将其返回以下错误:

interning empty string

感谢您的任何建议。

回答

0

如果我正确理解你的问题,你想在CURRENT_USER的id指定为请求者ID的请求模型?

# assign values passed in via form 
@request = Request.new(params[:request]) 
# assign current_user to request 
@request.requestor = current_user 
# save the request 
@request.save! 

希望这会有所帮助!

+0

这结束了工作: @ resource.requestor = CURRENT_USER 我不知道的唯一的事情是如何做的事情上面做不用户主键分配给requestor_id。我认为我们必须指定requestor_id,但显然并非如此。任何洞察到这是如何工作的?谢谢。 – JohnMerlino

+0

在Rails中,当你将一个对象分配给关系时(例如:current_user是一个用户对象到请求者),它会自动提取对象的ID(在这种情况下是用户的ID)并根据关系将其分配给外键(在这种情况下requestor_id)。你可以在ActiveRecord gem中找到这个功能的详细源代码。 –

+0

感谢您的解释。 – JohnMerlino

2

您是否可以在创建时通过请求current_user

@req = Request.new(:requestor => current_user) 

我不太知道什么是产量PARAMS声明是为了干什么,

4

我不断收到此错误。我将其追溯到非常简单的代码,并在控制台中使用此复制:

ruby-1.8.7-p174 :084 > a = 'fred' 
=> "fred" 
ruby-1.8.7-p174 :085 > a.to_sym 
=> :fred 
ruby-1.8.7-p174 :086 > a = '' 
=> "" 
ruby-1.8.7-p174 :087 > a.to_sym 
ArgumentError: interning empty string 
    from (irb):87:in `to_sym' 
    from (irb):87 
+0

此行为仅在1.8上发生。在1.9上,你会得到':“”'。偶尔我写的代码在1.9上工作,但不在1.8上。 –

+0

谢谢你。用红宝石1.8.7编码,被这个错误困惑,从来没有见过它。为我节省了一些头痛。 – Batkins