【问题标题】:Accessing an attribute of a linked model in Rails在 Rails 中访问链接模型的属性
【发布时间】:2011-01-29 21:17:11
【问题描述】:

所以,很抱歉,如果这没有连贯一致......我还不知道我所有的 Ruby/Rails 术语。

我有一个名为“Profile”的模型和一个名为“User”的模型,两者是这样链接的:

class Profile < ActiveRecord::Base
belongs_to :user
class User < ActiveRecord::Base
has_one :profile

现在,在我创建的配置文件的“索引”和“显示”视图中,我希望能够从用户模型访问属性“名称”。我怎样才能做到这一点?我想我在控制器中需要一些看起来像这样的东西:

class ProfilesController < ApplicationController
  def show
    @user = User.find(params[:user_id])

然后像这样在视图中访问它:

<%= @user.name %>

但是那里的那段代码不起作用。

感谢您的帮助。

【问题讨论】:

  • 请提供有关“不起作用”的更多详细信息。任何错误屏幕?

标签: ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

如果属性name属于Profile模型,在你看来:

<%= @user.profile.name %>

如果属性name属于User模型,请停止服务器,运行rake db:migrate以确保每次迁移都已应用到您的数据库;然后运行rails consoleruby script/console 来检查属性是否适用于您的模型:

> u = User.first
> u.name

如果最后一个命令返回空字符串或您的第一个用户的名称,则一切正常。如果你得到一个NoMethodError: undefined method,你应该检查你的数据库,因为应该处理name 属性的列可能丢失了。

【讨论】:

  • 谢谢!属性“名称”是用户模型的一部分,当我运行 rails 控制台命令时,我会返回数据库中第一个用户的字符串。也就是说,如何在 Profile 视图中访问 User.name?
  • 请尝试&lt;%= @user.inspect %&gt; 而不是&lt;%= @user.name %&gt; 以查看您希望加载的记录是否已正确加载到控制器中。在浏览器中编辑并重新加载视图。
【解决方案2】:

您的控制器应该可以工作。那部分是正确的。

几个问题

您的个人资料有 user_id 吗?

您是否运行了为Profile 创建属性 user_id 和为User 创建属性 profile_id 的迁移?

【讨论】:

  • 'Profile' 中有 user_id 属性,但 'User' 中没有 profile_id 属性。应该有吗?此外,当我检查 SQL DB 时,每个配置文件中的 user_id 列都是空白的。那……不可能。
  • 嗯.. 配置文件是在您在模型中实现关系之后创建的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多