Ruby新手 - 外键和表格下拉列表

时间:2014-05-23 10:09:04

标签: mysql ruby-on-rails

我是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

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:2)

问题是您已将jobtitle作为Jobtitle模型的属性。将其视为 Jobtitle's model instance 但不是 {{1 }} 。尝试将attribute of Jobtitletitle改为name的属性。

Jobtitle中,edit view就像这样

drop-down

在节目视图中,你可以给出

<%= f.collection_select(:jobtitle_id, @jobtitles, :id, :title) %>

显示<%= @person.jobtitle.title %> 的{​​{1}}。

目前您提供的associated jobtitle's title错误