Rails - 如何让两个用户ID与模型相关联

时间:2015-03-30 19:30:23

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

我正在使用devise作为我的auth框架。我有一个报告模型,其属性为:user,用户模型为has_many:reports。当我将报告状态设置为/#34时关闭"我想将当前用户保存为"关闭"报告,可能不是创建报告的用户。所以我在报告调制解调器中添加了另一列名为closed_by_user_id:integer:index。我不确定如何使用标准模型用户关联来实现这一目标。所以我添加了一些代码来保存current_user到" Closing"一份报告。然后会出现在表格中。然后,我想要显示创建报告的用户(它使用魔术设计助手自动完成),并且我想显示关闭"关闭"那个报告。这不会自动生效,或者至少我不知道如何去做。所以我尝试在关闭时使用当前用户在用户模型上调用find方法/在报告上保存索引视图迭代的报告。我得到一个ActiveRecord Relation和一个true值。在rails控制台中的一个查询我确实得到了正确的记录,但是输出了u.name输出" User"。不知道从哪里开始。以前那些曾经玩过这种更复杂场景的人的想法是什么?我非常感谢对此的教育。谢谢

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable,     :timeoutable

  has_many :reports
end

class Report < ActiveRecord::Base
    belongs_to :user
end

2.2.1 :011 >   u = User.where(id: 2)
User Load (0.3ms)  SELECT `users`.* FROM `users` WHERE `users`.`id` = 2
 => #<ActiveRecord::Relation [#<User id: 2, name: "Test User", username: "tuser", email: "testuser@mail.com", encrypted_password: "$2a$10$BuPxu4JKZeVSK2AR6DaNT.KthntX0lb3SmAFq5I5mID...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-03-30 19:04:10", last_sign_in_at: "2015-03-30 19:04:10", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", failed_attempts: 0, unlock_token: nil, locked_at: nil, created_at: "2015-03-30 19:04:09", updated_at: "2015-03-30 19:04:10">]>

2.2.1 :012 > u.name
 => "User" 
2.2.1 :013 > 

1 个答案:

答案 0 :(得分:0)

在报告中,默认情况下有一个closed列,其布尔值设置为false,报告表中的列为closed_by列,这是一个整数。

从节目视图中,有一个“关闭”按钮,用于提交表单。封闭的形式会有隐藏的字段,例如。

f.hidden_field :closed_by, val: current_user.id
f.hidden_field :closed, val: true

然后,可以在控制器中运行操作以更新报告属性,例如。

update(report_params)

现在,关闭的布尔值设置为true,您可以通过查找该ID在该列中结束的用户的ID来调用用户ID。在报告控制器中,您将找到用户并将其分配给实例变量。

@closer = User.find(params[:closed_by])

这将检查closed_by列检索整数,然后按ID查找用户。

现在,在您的节目视图中,您可以调用用户属性。例如,如果您的用户有姓名,您可以致电:

<%= @closer.name %>

您还可以在视图中使用布尔值来显示“已关闭”的文本。例如:

<% if report.closed == true %>
    <p>Report Closed</p>
<% end %>