2013-03-08 72 views
0

經驗豐富的Java開發人員,Rails的新手 - 懷疑腳手架中的belongs_to關係。Rails腳手架belongs_to - 顯示#<MyClass:xxxx>

看到了另一個答案是這樣

Does rails scaffold command support generate belongs_to or many to many model middle table migration info?

跟着rails generate scaffold_controller obj:references模式。

索引/顯示頁面顯示#<MyClass:xxxx>而不是我想要的字符串 - 是否有目標類中的方法(belongs_to的父級)我需要重寫以指定標識符?

同樣在編輯視圖中,它看起來像試圖將參考修改爲字符串而不是下拉式選項 - 是否需要指定以實現此目的?

謝謝!

順便說一句 - 我能夠得到類似的腳手架在Django和Grails中工作,外鍵變成了下拉菜單;我希望Rails同樣簡單,我只是想念它。

回答

1

您可以覆蓋實例上的#to_s方法,因爲它是被調用的方法。

class FooDoodle < ActiveRecord::Base 
    def to_s 
    name 
    end 
end 

這時候顯示一個記錄的。

但是,當您實際使用表單來設置關聯時,腳手架只會在視圖中生成一個輸入字段,以便您可以輸入該id。例如,您可以有一個下拉菜單,但該下拉菜單的選項必須以某種方式進行選擇。

例如,如果有2000個可能的關聯記錄,您顯示哪個記錄?你顯示2000?只有前10個?這個邏輯會進入你的控制器。

所以,例如:

class FooDoodlesController < ApplicationController 
    def edit 
    @foodoodle = FooDoodle.find(params[:id]) 

    @friends = @foodoodle.possible_friends # or else 
    end 
end 

和使用selectoptions_for_select作爲選擇

# _form.html.erb 

<%= form_for @foodoodle do |f| %> 
    <%= f.label :friend %> 
    <%= f.select :friend, @friends.map{ |p| [p.to_s, p.id] } %> 
+0

感謝上to_s尖端。 假設列表足夠小 - 是否有任何生成下拉列表的方法 - 或者我必須手動執行該操作?它會是什麼樣子? – wrschneider 2013-03-08 20:50:43

+0

@ wrs在那裏,我添加了一個例子。 – 2013-03-08 21:05:42