我正在尝试创建一个简历生成器。在简历中,我想将{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 %>
答案 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
关系:
因此,您可以通过以下设置获得更好的效果 -
#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 %>