Rails 2:联合多表

时间:2012-02-14 10:18:54

标签: ruby-on-rails ruby-on-rails-2

对不起,我是新手

我有数据库:

迁移

-Mst_group tble

class CreateMstGroups < ActiveRecord::Migration
  def self.up
    create_table :mst_groups do |t|
      t.string :group_name
    end
  end
end

-Mst_japan

class CreateMstJapans < ActiveRecord::Migration
  def self.up
    create_table :mst_japans do |t|
      t.string :name_level
    end
  end
end

-Tbl_user

class CreateTblUsers < ActiveRecord::Migration
  def self.up
    create_table :tbl_users do |t|
      t.string :login_name, :null =>false,:limit =>15
      t.string :password,:null =>false,:limit =>50
      t.string :full_name,:null =>false
      t.string :full_name_kana
      t.string :email,:null =>false
      t.string :tel,:null =>false,:limit =>15
      t.date :birthday,:null =>false  

      t.references :mst_groups
    end
  end
end

-Tbl_detail_user_japan

class CreateTblDetailUserJapans < ActiveRecord::Migration
  def self.up
    create_table :tbl_detail_user_japans do |t|
      t.date :start_date
      t.date :end_date
      t.integer :total

      t.references :tbl_users
      t.references :mst_japans
    end
  end
end

模型

class MstGroup < ActiveRecord::Base
  has_many :tbl_users
end

class MstJapan < ActiveRecord::Base
  has_many :tbl_detail_user_japans
end

class TblUser < ActiveRecord::Base
  belongs_to :mst_group
  has_one :tbl_detail_user_japan
end

class TblDetailUserJapan < ActiveRecord::Base
  belongs_to :tbl_user
  belongs_to :mst_japan
end

控制器

def index
  @user= ???????
end

如何编写命令选择:控制器中的 login_name,full_name,full_name_kana,email,tel,group_name,name_lever,start_date,end_date,total

1 个答案:

答案 0 :(得分:0)

这取决于您希望如何检索User对象。您需要告诉Rails如何找到TblUser对象。例如,如果用户ID已知,请在名为&#39; id&#39;的变量中说。然后你会这样做:

def index
  @user=TblUser.find(id)
end

这取决于您的应用程序逻辑Rails如何知道您需要哪个用户。在登录等情况下,您可能需要用户输入。 (通常在Rails中你会调用表&#39; Users&#39;,按照约定表和类具有相同的名称,然后你就不需要调用类TblUser了)

这就是您在控制器中所需要的一切,您不需要告诉它您想要哪些字段。 然后在视图中,您可以访问所有字段: TblUser上的字段,例如:

<%= @user.email %>

您可以通过关系访问相关对象中的字段,例如:

<%= @user.mst_group.group_name %>

希望有助于您入门。