2

と の 2 つのテーブルがありuserますorder

create_table "orders" do | t |
t.text "name"
t.integer "user_id"
end

create_table "users" do | t |
t.text "email"
end

2 つのクラス:

class Order <ActiveRecord :: Base
  belongs_to: users
end

class User <ActiveRecord :: Base
   has_many: orders
end

コントローラ:

class TestController <ApplicationController
   def index
     @ tmp = Order.all(:include =>:users)
   end
end

質問: すべての注文が必要ですがuser_idemail関連付けられているのではなくuser_id返品されます

4

2 に答える 2

1

コメントするほどの評判はありませんが、order.user.email の問題については、try メソッドを使用します。

order.user.try(:email)

ユーザーが nil の場合、例外を発生させる代わりに、単に nil を返します。

于 2013-09-10T16:36:21.017 に答える
1

スタック オーバーフローへようこそ。私は Rails を初めて使用しますが、これを試してください。

@tmp = Order.all(
              :select => 'orders.id, orders.etc, users.email',
              :joins => "LEFT JOIN users on users.id = orders.user_id",
              # :conditions => ['column_name = ?', @value_of_your_choice],
              :order => 'orders.created_at ASC'
            )

これを試すこともできます:

class TestController < ApplicationController
  def index
    @tmp = Order.all()
  end
end

次に、ビューで:

<% @tmp.each do |order| %>

  <!-- do not show if orders.user.id is NULL -->
  <% if !order.user_id.nil? %>
    <tr>
      <td><%= order.id %></td>
      <td><%= order.user.email %></td>
    </tr>
  <% end %>
<% end %>

2 つのモデル間の関係が定義されているため、関連付けられた人物のプロパティにこの方法でアクセスできます。

ただし、 belongs_to: userstobelongs_to: userを変更する必要があるかもしれませんuser.rb

于 2013-09-10T15:29:34.187 に答える