我如何 运行 一个简单的 each-do 循环来组合来自不同表的列? (回报率)

How do I run a simple each-do loop that combines columns from different tables? (RoR)

我正在尝试使用 each-do 循环遍历两个单独列的数据。我希望问题显示在页面上,然后是用户的电子邮件和 update_last。我是新手,不确定如何同时从不同数据库中的不同列中提取数据。这是我的代码:

<ul>
<% @questions.each do |question| %>
<hr>
    <li><%= **question**.title %></li>
    <li><%= **question**.user_id %></li>
    <li><%= **users**.email %></li>
<% end %>
</ul>

任何帮助都会很棒。我刚刚开始学习 RoR,而且有很多信息!!

提前致谢。

-T

了解活动记录关联。安装用户对您的模型有很多疑问。 然后,当您在每个块中将用户集合对象作为单个对象迭代时,您将遇到一个方法问题(例如 user.questions)。现在遍历 user.questions 您将收到针对该特定用户的问题。 http://guides.rubyonrails.org/association_basics.html

设置您的模型:

# app/models/user.rb
class User < ActiveRecord::Base
  has_many :questions, dependent: :destroy
end

# app/models/question.rb
class Question < ActiveRecord::Base
  belongs_to :user
end

user_id 列添加到您的 questions table:

rails g migration AddUserIdToQuestions user_id:integer
rake db:migrate

然后,在你相应的控制器动作中:

def your_action_method
  @user = User.find(1) # find a user
end

那么,在你对应的视图中:

<ul>
  <% @user.questions.each do |question| %>
      <li><%= question.title %></li>
      <li><%= question.user_id %></li>
      <li><%= @user.email %></li>
  <% end %>
</ul>

这是一个基本的工作设置,您可以快速开始。但是,还有更多事情要做。绝对检查 official Rails Guide for Association.

此外,在创建拥有的对象 (question) 时,您必须将其关联到正确的所有者对象 (user),以便您可以随时执行:user.questions是时候得到那个特定 userquestions 了。像这样:

@user = User.find(1)
@question = Question.create(title: 'Title', body: 'body', user_id: @user.id)

您还可以在 Question 模型中添加 Active Record Validations 以确保在创建 question 记录时存在 user_id

# app/models/question.rb
class Question < ActiveRecord::Base
  belongs_to :user
  validates :user_id, presence: true
end