在控制器中使用不同型号的模型?

时间:2012-08-27 17:35:04

标签: ruby-on-rails model controller

我有一个用户模型(由设计生成)和Rails项目中的提交模型。我在用户模型中添加了一个名为“full_name”的字段。此外,提交模型中还有一个“user_id”字段。

我想在提交节目页面上显示与提交相关联的用户的full_name。现在它显示提交模型中的user_id就好了。

用户模型我有这个:

class User < ActiveRecord::Base
  has_many :submissions
  devise :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable, :confirmable

  attr_accessible :email, :password, :password_confirmation, :remember_me, :full_name, :role_id

  validates_presence_of :full_name
end

这是提交的模型:

class Submission < ActiveRecord::Base
  belongs_to :user
  attr_accessible :description, :title, :user_id
end

这是在控制器中:

  def show
    @submission = Submission.find(params[:id])
    @user = User.find(params[@submission.user_id])

    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @submission }
    end
  end

当我尝试在视图中使用此行时,我得到了什么:

<%= @user.full_name %>

我收到此错误:

Couldn't find User without an ID

我尝试了几种变体,并且无法弄清楚应该代替什么:

@user = User.find(params[@submission.user_id])

1 个答案:

答案 0 :(得分:2)

假设您正确填充数据,只需在查看提交内容后就需要以下内容。

@submission.user

如果您认为数据正常,请在Rails控制台中尝试以下操作。

> Submission.first.user

你在那看到什么?


您看到的具体错误是因为:

params[@submission.user_id]

不太可能有任何东西。如果用户ID为“1”(例如),那么您要求params散列中与键“1”对应的值。