将参数传递给模型

时间:2010-12-20 16:05:45

标签: ruby-on-rails

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

1 个答案:

答案 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