2013-01-07 60 views
0

在我的Rails應用程序中,我有一個基於SQL視圖的collection_select。該視圖可以在SQL中正常工作,並且視圖中有很多條目。基於SQL視圖的Collection_select包含空白值

fsix_dev=> SELECT "infinitives".* FROM "infinitives"; 
id | word  | language_id | audiofile | imagefile | gender 
-----+-------------+-------------+-----------+-----------+-------- 
17 | aller  |   2 |   |   |  
61 | venir  |   2 |   |   |  
69 | suivre  |   2 |   |   |  
... etc ... 

在我的編輯視圖中collection_select:

.field 
    = f.label :infinitive_id 
    = f.collection_select :infinitive_id, Infinitive.find(:all), :id, :word, include_blank: :false, :title => "Infinitive" 

在collection_select似乎帶回在視圖中的每一行的條目的頁面,但它呈現與所有空值

<div class='field'> 
    <label for="word_infinitive_id">Infinitive</label> 
    <select id="word_infinitive_id" name="word[infinitive_id]"><option value=""></option> 
    <option value=""></option> 
    <option value=""></option> 
    <option value=""></option> 
    <option value=""></option> 
    ... etc ... 

模式

class Infinitive < ActiveRecord::Base 
    belongs_to :word 
    attr_reader :id, :word, :language_id, :audiofile, :imagefile 
end 

class Word < ActiveRecord::Base 
    has_many :infinitives 
    attr_accessible :word, :gender, :audiofile, :imagefile, :speech_part_id, :ssubject_id, :present_participle, :past_participle, :tense_id, :mood_id, :infinitive_id, :question, :negative 
end 

控制器

class InfinitivesController < InheritedResources::Base 
end 

編輯

瓦列裏Kvon的下面筆記,我試圖在軌控制檯以下,並獲得不少迴應:

1.9.3-p194 :001 > Infinitive.find(:all) 
    Infinitive Load (338.9ms) SELECT "infinitives".* FROM "infinitives" 
=> [#<Infinitive id: 17, word: "aller", language_id: 2, audiofile: nil, imagefile: nil,  gender: nil>, #<Infinitive id: 61, word: "venir", language_id: 2, audiofile: nil, imagefile:  nil, gender: nil>, ... many results ... 

然而,當我嘗試映射:字返回正如許多成果,但都無:

1.9.3-p194 :002 > Infinitive.find(:all).map(&:word) 
    Infinitive Load (1.4ms) SELECT "infinitives".* FROM "infinitives" 
    => [nil, nil, nil, nil, nil, nil, nil, nil, nil ... etc ... 

奇怪的是出現在以前象徵找到

編輯2

我試圖重新命名infinitive_word ....相同的結果。在Rails中,一個collection_select可以構建一個SQL視圖嗎?

1.9.3-p194 :002 > Infinitive.find(:all) 
    Infinitive Load (1.6ms) SELECT "infinitives".* FROM "infinitives" 
    => [#<Infinitive id: 17, infinitive_word: "aller", audiofile: nil, imagefile: nil, gender: nil>, #<Infinitive id: 61, infinitive_word: "venir", audiofile: nil, imagefile: nil, gender: nil>, ... etc .... 

與地圖成infinitive_word

1.9.3-p194 :003 > Infinitive.find(:all).map(&:infinitive_word) 
    Infinitive Load (1.3ms) SELECT "infinitives".* FROM "infinitives" 
    => [nil, nil, nil, nil, nil, nil, nil, nil, nil, 

編輯3

我設法得到collection_select工作,但增加了它作爲一個編輯,而不是因爲我不明白爲什麼這個解決方案是必要的。這似乎是一個哈克解決方法

的解決方案所需的兩個變化:

  • 改變了SQL視圖,以便該屬性是不一樣的關係
  • 改變attr_readerattr_accessible不定式模型。

我本來期望的Rails可以處理具有相同的名稱作爲關係的屬性,但更顯著我希望基於SQL視圖的ActiveRecord的關係將是attr_reader,而不是attr_accessible

任何人都可以解釋這裏發生了什麼?

回答

0

只是刪除 'include_blank' 或使用prompt代替

.field 
    = f.label :infinitive_id 
    = f.collection_select :infinitive_id, Infinitive.find(:all), :id, :word, prompt: :false, :title => "Infinitive" 
+0

感謝您的回答。我確實嘗試過,但沒有什麼區別。 – ardochhigh

0

這是因爲你的不定式的:ID和:字方法返回零。

attr_reader :id, :word 
  • 這是一個問題。

此外:字是一個關聯,並返回Word對象......但對於* collection_select *這個方法應該返回字符串/值長整數(負責.to_s)。

+0

但是,當我運行查詢我收到數據的視圖。我看不到Rails中的斷開連接。可以通過使用 ardochhigh

+0

我還不知道。嘗試在控制檯:Infinitive.find(:所有).map(&:word) –

+0

我看到實體上有一個單詞屬性,也是基於belongs_to的單詞關聯。我會嘗試改變一個,看看會發生什麼。 – ardochhigh