Rails 4:显示与user_id相关的表

时间:2014-09-21 03:43:56

标签: mysql ruby-on-rails view foreign-key-relationship table-relationships

我正在尝试创建一个简历生成器。在简历中,我想将{em>第一个对应的Job 标题显示在User中的特定show.html.erb

我首先确保Jobs有user_id外键..

模式

create_table "jobs", force: true do |t|
    t.string   "title"
    t.string   "company"
    t.date     "date_start"
    t.date     "date_end"
    t.boolean  "current"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.integer  "user_id"
    t.integer  "career_id"
end

..和人际关系是这样的:

用户模型

class User < ActiveRecord::Base

        has_one :career
        has_many :jobs, through: :career
end

工作模式

class Job < ActiveRecord::Base
    belongs_to :user
    has_many :descriptions
end

控制器

def show
  @user = User.find(1)
end

最好的方法是什么?我能够在同一个Show View页面上显示其他元素,如Name和Contacts。我尝试了很多不同的线路,但目前有这个......

显示视图

<%= @user.jobs.first.title %>

2 个答案:

答案 0 :(得分:1)

您的工作模型有belongs_to:user,这意味着您的工作表需要user_id属性。

我不知道你的职业模特是怎样的,但似乎你不需要

has_many :jobs, through: :career

如果您通过user_id将作业直接绑定到用户(应将其添加到您的作业表中)。换句话说,

has_many :jobs

可能会奏效。但是,如果您需要坚持职业生涯,那么请确保

class Career < ActiveRecord::Base
  belongs_to :user
  has_many :jobs
end

然后,从你的观点来看:

<%= @user.jobs.first.title %>

答案 1 :(得分:1)

加入表格

您正在关注的是has_many :through关系:

enter image description here

因此,您可以通过以下设置获得更好的效果 -

#app/models/user.rb
class User < ActiveRecord::Base
   #fields id | etc | etc | etc | created_at | updated_at
   has_many :careers
   has_many :jobs, through: :careers
end

#app/models/career.rb
class Career < ActiveRecord::Base
   #fields id | job_id | career_id | created_at | updated_at
   belongs_to :job
   belongs_to :career
end

#app/models/job.rb
class Job < ActiveRecord::Base
   #fields id | title | created_at | updated_at
   has_many :careers
   has_many :users, through: :careers
end

这将使您能够调用以下内容:

#app/controllers/users_controller.rb
class UsersController < ApplicationController
   def show
      @user = User.find
   end
end

#app/views/users/show.html.erb
<%= @user.jobs.first.title %>