2011-05-19 138 views
0

這可能看起來像一個初學者的問題,但它讓我難住。我有一個用戶模型和一個位置模型。位置屬於用戶,並且用戶具有多個位置。我有位置存儲爲我的路線文件中的嵌套資源。保存和檢索模型

下面是我的LocationsController文件的創建功能:

def create 
    @user = User.find(params[:user_id]) 
    @location = @user.locations.build(params[:location]) 

    respond_to do |format| 
     if @location.save 
     format.html { redirect_to @user } 
     format.js { 
      @locations = @user.locations 
      render 'create' 
     } 
     else 
     format.html { render @user } 
     format.js 
     end 
    end 
    end 

create.js.erb:

$('table#locations').html("<%= escape_javascript(render(@locations)) %>"); 

_location.html.erb:

<tr> 
    <td><%= location.user.name %></td> 
    <td><%= location.created_at %></td> 
    <td><%= location.longitude %></td> 
    <td><%= location.latitude %></td> 
</tr> 

保存到數據庫使用AJAX工作沒有問題。但是,檢索記錄時,返回表的最後一行只包含用戶名。不顯示created_at,經度和緯度。如果我刷新頁面,則會顯示它們。有沒有人有任何想法,爲什麼這可能會發生?

謝謝。

更新

我顛倒了模型的秩序,它仍然是不打印底部入口。我的猜測是這是關於視圖而不是模型。

回答

1

我認爲當您在控制器中爲AJAX響應初始化@locations變量時,可能會出現問題。您保存了新的位置,但@user對象可能沒有注意到。取而代之的

@locations = @user.locations 

嘗試

@locations = Location.where(:user_id => @user) 

或類似的東西,這將保證你拉從數據庫中的位置。

這是一個猜測!

+0

這是一個很好的建議,但它沒有奏效。無論如何感謝您的答覆。 – LandonSchropp 2011-05-19 06:13:32

+0

好吧,你可以將@locations的內容記錄到控制器的控制檯/日誌中嗎?你必須確定數據是否真的存在。如果是這樣,那麼你知道這是你的看法的問題(我懷疑你的視圖代碼看起來很簡單)。 – CharlieMezak 2011-05-19 13:05:01

+0

嗯,你是對的。當我從控制器記錄數據時,最後一項缺少其數據。它讀取#<位置id:nil,longitude:nil,緯度:nil,user_id:1,created_at:nil,updated_at:nil>。奇怪的部分是我在位置模型中驗證經度和緯度的存在。 – LandonSchropp 2011-05-20 04:04:30

1

由於您在保存新位置之前從數據庫獲取用戶記錄,因此可能不會檢索新位置。也許在渲染視圖之前調用user.reload。或者等到您保存完位置後再執行User.find

+0

感謝您的回覆,但這似乎不起作用。 – LandonSchropp 2011-05-19 06:13:53