2012-12-13 132 views
0

這是我一直在努力解決的問題,但我還沒有找到一種不覺得像徹頭徹尾的黑客的方式。我有2個對象倉庫和StateCity。 Warehouse對象具有StateCity對象的外鍵(state_city_id)。紅寶石兒童父母形式

現在,當用戶創建倉庫時,我希望他們能夠輸入州和市。目前他們可以這樣做,我只需檢查州和市提交的參數,然後創建或找到相應的ActiveRecord對象。現在,當他們在我的視圖中查看倉庫時,我已經在使用助手從StateCity對象中提取狀態/城市(如果它存在並在我的模型上添加方法以執行如下相同的功能)之間振盪起來

def show_state(warehouse) 
    if warehouse.state_city.nil? == false 
    return warehouse.state_city.state 
    end 
    return "" 
end 

def show_city(warehouse) 
    if warehouse.state_city.nil? == false 
    return warehouse.state_city.city 
    end 
    return "" 
end 

不幸的是,無論是輔助方法還是增加具有額外功能的模型似乎都是非常自然的,因爲我必須使用一個來創建對象,另一個使用對象的維度。

我想知道是否有人有更好的方法來解決倉庫StateCity問題的任何建議。任何幫助是極大的讚賞。

回答

1

首先,你可以寫,如果這種說法就像這樣:

return warehouse.state_city.city unless warehouse.state_city.nil? 

但我敢肯定這不是你正在尋找的答案。

我假設你總是希望倉庫與StateCity相關聯。如果是這種情況,那麼無論何時創建倉庫,您的用戶總是需要選擇州和城市,並且該邏輯由您的控制器處理並由您的倉庫模型進行驗證。

如果所有的驗證是正確的,那麼你需要在你的節目你的倉庫模型的動作做的是從倉庫取StateCity對象:

@state_city = warehouse.state_city 

然後在你看來只是進入字段@state_city.state@state_city.city。我不完全確定你是如何創建這些StateCity對象的,但這聽起來很像你想要做的事情。

如果你的state_city是零,你可以根據你想要顯示或不顯示來處理它。如果你仍然想以隨後顯示倉庫視圖顯示在視圖中,你可以不喜歡

<% if @state_city %> 
    # Do something with the state city like display the state and city? 
<% end %> 

檢查如果你想告訴用戶更新狀態的城市,例如,你會處理,從控制器通過做

unless @state_city 
    redirect_to "your edit action" and return 
end 

這將做的是它會檢查你的state_city是否爲空,那麼它會重定向用戶到任何你想要的動作。

+0

謝謝!我現在不能嘗試,但我完全忘記了該視圖可以訪問控制器變量。如果它起作用,那麼您是第一個選中該複選標記的人。但是,只有一個問題,如果我的state_city爲空,該怎麼辦?我該如何做到這一點,以便我的觀點不會在那件事上窒息(假設他們當時可能不確定state_city)?我可能不得不單獨打破州和城市。 –