Je souhaite imprimer les valeurs tirées de deux tables différentes dans la base de données dans une table de la page de vue. Je ne comprends pas comment gérer deux chaque itérateur car il se comporte anormalement i.e Impression d'une valeur plusieurs fois. Je suis très confus. S'il vous plaît aider.Comment gérer chaque itérateur?
Voici mon code
Dans le contrôleur:
class ListController < ApplicationController
def all
@books = Book.all
@susers = SUser.all
end
end
À mon avis Page
<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>
La sortie est affichée comme celui-ci
La else
partie de la première if
déclaration se répète encore et encore encore. Je ne sais pas pourquoi ça se passe?
Il existe 3 modèles dans ce projet. 1. utilisateur - Fait par 2. Livre concevoir 3. SUSER
Une chose importante: - En fait, je fait modèle SUSER parce que je veux stocker les données personnelles de l'utilisateur telles que le nom, l'adresse, numéro de téléphone. Je ne veux pas toucher au modèle (Utilisateur) donc j'ai fait un autre modèle SUser qui a une relation un à un avec le modèle (User).
modèle utilisateur:
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
Modèle livre:
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
modèle SUSER:
class SUser < ActiveRecord::Base
# attr_accessible :title, :body
has_one :user
has_many :books
attr_accessible :user_id, :fullname, :email, :address, :details
end
fichiers Migrations:
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
fichier de migration 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
Je fait beaucoup à plusieurs entre utilisateur et livre depuis un utilisateur ont beaucoup de livres et un livre peut être disponible pour de nombreux utilisateurs. donc je l'ai fait d'une simple table de jointure pour beaucoup de many
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 .. J'ai collé mon code tout ici. En fait, je suis nouveau sur les rails .. S'il vous plaît me guider si vous trouvez un autre défaut à ce code. Merci
Il n'affiche pas l'adresse. La colonne est vide. Je pense que les données ne viennent pas à cette partie. –
Ne fonctionne pas .. !! :( –
@ahmadhamza êtes-vous sûr il y a au moins un livre avec aucun nul (ou zéro) 'suser_id' dans votre db? – Serjio