通过已加入的数据库显示用户全名

时间:2014-06-26 10:57:18

标签: mysql ruby-on-rails ruby ruby-on-rails-4

我被卡住了。

我目前正在尝试在数据库用户中打印出 fullname 列。

我有像这样连接的数据库。

4个型号。公司,申请,答案,用户。

公司创建了一个可由用户回答的应用程序。

company.rb

has_many :applications
has_many :answers, through: :applications

application.rb

belongs_to :company
has_many :answers

answer.rb

belongs_to :application
has_many :users

user.rb

has_many :answers

公司创建了一组问题,这些问题存储在应用程序中。用户可以查看这些问题并回答它们。答案存储在答案中。当他们回答时,我将他们的user_id存储在answer.rb中。

我要做的是向公司展示哪位用户回答了他们的问题。我已经能够打印出他们的user_id,但不能打印出他们的.fullname。

这是我目前的设置:

<h1>People who've applied to your startup</h1>

<% @applications.all.each do |application| %>
 <% application.answers.each do |answer| %>

  <p>Your question1: <%= answer.application.question_1 %></p>
  <p>Their answer 1: <%= answer.answer_1 %></p>
 <p>Your question 2: <%= answer.application.question_2 %></p>
  <p>Their answer 3: <%= answer.answer_2 %></p>
  <p>Your question 3: <%= answer.application.question_3 %></p>
  <p>Their answer 3: <%= answer.answer_3 %></p>


  <i>Answered by user: <%= answer.user_id %></i>
  <hr>
  

这会成功打印出他们的user_id。但是我想更进一步,并获得他们的全名。那我该怎么做?他们的全名存储在user.rb模型中。

2 个答案:

答案 0 :(得分:2)

我认为更好的答案是:

class Answer < ActiveRecord::Base
  belongs_to :application
  belongs_to :user #here
  delegate :fullname, to: 'user', allow_nil: true, (optional) prefix: 'user'
end 

现在你可以做到

<%=answer.fullname%> or if you add the optional part <%=answer.user_fullname%>

如果你这样做,请阅读更多内容 delegate

前缀不必称为“用户”

delegate :fullname, to: 'user', allow_nil: true, prefix: 'any_name'

<%= answer.any_name_fullname%>

答案 1 :(得分:0)

首先, Relation User 之间的 Answer 似乎有误。你是应该在 belongs_to :user 模型中 Answer 而不是 has_many :users

#answer.rb
Class Answer < ActiveRecord::Base

belongs_to :application
belongs_to :user #here

end

其次,通过这样做,你可以这样做

<%= answer.user.fullname %>

获取 user's fullname 的关联 answer

您还应该查看这些 Guides 以获取更多信息。