Rails 3.0.3 红宝石1.9.2p0
问题:
我有一个包含许多项目的用户表,因此该项目又属于用户。
在我的模型item.rb中,我尝试将项目与user.id的值一起保存,所以我有:
self.User_ID = @user.id
然而这给了我错误
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
这引起了一些混淆,它无法找到这个,就像show.html.erb那样'包装'这个页面<%= @ user.id%>在页面上显示正确的ID
非常感谢提前
**编辑** 缩短动作是我想要传递参数的动作
class ItemsController < ApplicationController
def redirect
@item = Item.find_by_shortened(params[:shortened])
if @item
#redirect_to @item.original
redirect_to @item.original
else
redirect_to :shorten
end
end
def shorten
@host = request.host_with_port
@user = current_user
答案 0 :(得分:0)
您需要在每个需要访问它的操作中加载@user
模型。在show
操作中正确呈现它并不能保证它会在update
操作中加载。
通常你需要在你的控制器中有这样的东西:
class UsersController < ApplicationController
before_filter :load_user, :except => [ :index, :new, :create ]
# ...
protected
def load_user
@user = User.find(params[:user_id] || params[:id])
rescue ActiveRecord::RecordNotFound
render(:text => 'Record not found')
end
end