データベース内の 2 つの異なるテーブルから取得した値をビュー ページのテーブルに出力したいと考えています。異常な動作をしている、つまり値を数回出力しているため、各イテレータを 2 つ処理する方法がわかりません。私はとても混乱しています。助けてください。
これが私のコードです
コントローラーで:
class ListController < ApplicationController
def all
@books = Book.all
@susers = SUser.all
end
end
マイ ビュー ページで
<tbody>
<% @books.each do |b| %>
<% if b.branch == "I.T" %>
<tr>
<td><%= b.id %></td>
<td><%= b.book_name %></td>
<td><%= b.year %></td>
<td><%= b.user_id %></td>
<% @susers.each do |s| %>
<% if s.user_id == b.user_id %>
<td><%= s.address %></td>
<% else %>
<td>Error..!!</td>
<% end %>
<% end %>
</tr>
<% else %>
<% puts "No any book of this branch" %>
<% end %>
<% end %>
</tbody>
出力はこのように表示されます
else
最初のステートメントの部分は、if
それ自体を何度も繰り返しています。なぜそれが起こっているのかわからないのですか?
このプロジェクトには 3 つのモデルがあります。1. User - devise 製 2. Book 3. SUser
重要なことの 1 つ: - 実際に SUser モデルを作成したのは、名前、住所、電話番号などのユーザーの個人情報を保存したいからです。デバイスモデル(ユーザー)に触れたくないので、デバイスモデル(ユーザー)と1対1の関係を持つ別のモデルSUserを作成しました。
ユーザーモデル:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
has_and_belongs_to_many :books
has_one :s_user
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
# attr_accessible :title, :body
end
本のモデル:
class Book < ActiveRecord::Base
# attr_accessible :title, :body
has_and_belongs_to_many :users
belongs_to :s_user, :class_name => "SUser"
attr_accessible :id, :user_id, :book_name, :edition, :author, :branch, :publisher, :year, :details
end
SUser モデル:
class SUser < ActiveRecord::Base
# attr_accessible :title, :body
has_one :user
has_many :books
attr_accessible :user_id, :fullname, :email, :address, :details
end
移行ファイル:
class CreateBooks < ActiveRecord::Migration
def change
create_table :books do |t|
t.integer "user_id", :limit =>5
t.string "book_name", :limit => 50
t.integer "edition", :limit => 5
t.string "author", :limit => 30
t.string "branch", :limit => 30
t.string "publisher", :limit => 50
t.integer "year", :limit => 10
t.text "details"
t.timestamps
end
add_index :books, "user_id"
end
end
SUser 移行ファイル
class CreateSUsers < ActiveRecord::Migration
def change
create_table :s_users do |t|
t.integer "user_id", :limit => 5
t.string "fullname", :limit => 25
t.string "email", :default => "", :null => false
t.string "hashed_password", :limit => 40
t.string "salt", :limit => 40
t.string "address",:limit => 25
t.text "details"
t.timestamps
end
add_index :s_users, "user_id"
end
end
1 人のユーザーが多くの本を持っていて、1 つの本を多くのユーザーが利用できるため、ユーザーと本の間に多対多の関係を作りました。だから私は多対多の関連付けのための単純な結合テーブルを作りました
class CreateBooksUsersJoin < ActiveRecord::Migration
def up
create_table :books_users, :id => false do |t|
t.integer "book_id"
t.integer "user_id"
end
add_index :books_users, ["book_id", "user_id"]
end
def down
drop_table :book_users
end
end
Lol ..コード全体をここに貼り付けました。実際、私はレールに慣れていません。このコードに他の欠陥が見つかった場合は、私を案内してください。ありがとう