我正在使用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 >
答案 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 %>