我是Ruby on Rails的新手,我正在努力解决外键关系并在表单上拉下框。我有一个Person表,带有Jobtitle表的外键。 Person有jobtitle_id,Jobtitle在MySQL中设置了pk id。在人模型
class Person < ActiveRecord::Base
belongs_to :jobtitle, :foreign_key => "jobtitle_id", :class_name => "Jobtitle"
attr_accessible :id, :jobtitle
在JobTitle
class Jobtitle < ActiveRecord::Base
attr_accessible :id, :jobtitle
has_many :people
控制器:
class PeopleController < ApplicationController
before_action :set_person, only: [:show, :edit, :update, :destroy]
before_filter :prepare_jobtitles
...
private
def prepare_jobtitles
@jobtitles = Jobtitle.all
end
在编辑表单中,下拉列表由:
给出<%= f.collection_select(:jobtitle_id, @jobtitles, :id, :jobtitle) %>
在show.html.erb。
<p>
<strong>Jobtitle:</strong>
<%= select_tag 'jobtitle_id', options_for_select(Jobtitle.find_by_id(:jobtitle_id)) %>
问题是:
(1)编辑表单不更新基础表。这是因为它没有传回jobtitle_id吗?或当活动记录尝试更新记录时外键约束失败?
(2)我真的不想在展示页面上显示dropdown
框,就像文字没问题一样,但使用<%= @person.jobtitle %>
显示# Jobtitle:0x4ea4dc0
有人能指出我正确的方向吗?
答案 0 :(得分:2)
问题是您已将jobtitle
作为Jobtitle
模型的属性。将其视为 Jobtitle's model instance
但不是 {{1 }} 。尝试将attribute of Jobtitle
或title
改为name
的属性。
在Jobtitle
中,edit view
就像这样
drop-down
在节目视图中,你可以给出
<%= f.collection_select(:jobtitle_id, @jobtitles, :id, :title) %>
显示<%= @person.jobtitle.title %>
的{{1}}。
目前您提供的associated jobtitle's title
错误