2013-05-02 49 views
2

我注意到當我在其中一個表中創建一條記錄時,我有一些與該表相關的數據,它已經添加了1條記錄,但它是零?Ruby on Rails:獲取額外的記錄是零?

例如:

名單控制器

def show 
    @list = List.find(params[:id]) 
    @idea = @list.ideas.build 
    respond_to do |format| 
     format.html # show.html.erb 
     format.json { render json: @list } 
    end 
    end 

列表模式

has_many :ideas 

想法模型

belongs_to :list 

列表> show.html.erb

<%= @list.ideas.each do |idea| %> 
    <div> 
    <div class="list_idea_desc"><%= idea.description %></div> 
    <div><%= link_to 'Show', idea %></div> 
    <div><%= link_to 'Destroy', idea, method: :delete, data: { confirm: 'Are you sure?' } %> </div> 
    </div> 
<% end %> 

我得到這樣的記錄:

[#<Idea id: nil, name: nil, description: nil, 
picture: nil, created_at: nil, updated_at: nil, list_id: 1>] 

idea記錄會自動被插入到我的數據庫,當我創建一個新的列表。爲什麼會發生?

+1

它沒有插在你的數據庫,它只是貝因爲您在控制器中構建它,所以顯示ng。我推斷,因爲想法有ID:無 – 2013-05-02 02:49:58

+0

@ user1438190我是新來的鐵軌,你能給我更多的細節,以我的替代是什麼?對此,我真的非常感激。 – hellomello 2013-05-02 02:51:14

+0

你的目標是什麼?爲什麼你加了'@idea = @ list.ideas.build'? – 2013-05-02 02:52:05

回答

4

差異與build之間newbuild增加了新創建的對象添加到集合:

替換:

@idea = @list.ideas.build 

有了:

@idea = @list.ideas.new 

或者,如果你想只使用build,你應該

替換:

<%= @list.ideas.each do |idea| %> 

有了:

<%= @list.ideas(true).each do |idea| %> 

true discards the cached copy of ideas and goes back to the database.

+0

我改變了你的代碼,現在我得到一個無路由匹配,這是不正確的,因爲我確實有正確的路由? – hellomello 2013-05-02 05:55:32

+0

@andrewliu,更新了答案。 – shweta 2013-05-02 06:12:11

+1

OH天才!!!非常感謝你!你解決了很多我遇到的問題!通常使用「真」嗎?或者這只是一個「黑客」來擺脫我的問題? – hellomello 2013-05-02 06:57:10

1

這是由於@idea = @list.ideas.build代碼行,刪除它並檢查它。 它可能適用於您的視圖。

<% @idea = @list.ideas.build %> 
<%= form_for [@list,@idea] do |f| %> 
+0

如果我刪除了那個,那麼我得到一個未定義的'model_name'爲NilClass:Class', form_for [@ list,@ idea] do | f | %>'。 – hellomello 2013-05-02 05:06:20

+0

您可以在表單上方的視圖中包含此代碼,但這不是個好主意 – 2013-05-02 05:09:05

+0

請參閱我的更新回答 – 2013-05-02 05:13:06

1

試試這個:

<%= @list.ideas.each do |idea| %> 
    <% if idea.present? %> 
    <div> 
    <div class="list_idea_desc"><%= idea.description %></div> 
    <div><%= link_to 'Show', idea %></div> 
    <div><%= link_to 'Destroy', idea, method: :delete, data: { confirm: 'Are you sure?' } %>     </div> 
    </div> 
    <% end %> 
<% end %> 

使用禮物?條件在記錄保存時間也。