2013-07-11 89 views
1

我正在學習Ruby on Rails(我的第一個MVC),並已成功設置「Agents」和「Zipcodes」之間的多對多關係。我現在想要做的是根據用戶輸入的郵政編碼獲取關聯的代理。我能夠在控制檯中如此成功,但我很難將其轉換爲控制器和視圖。我該如何從控制檯將它們傳送到控制器並查看

我在控制檯什麼:

zip = Zipcode.find_by_zip(gets.chomp) 
=> 92562 
zip.agents 

我在掛斷是如何翻譯成我可以從與表單視圖訪問的動作這一點。

我已經開始通過定義行動(代理商#查找),但我難以確定這是否正確,以及之後會發生什麼。

def find 
    @user_zip = Zipcode.find_by_zip(params[:zip]) 
end 

希望有人在這裏真棒可以指向正確的方向上的n00b。

回答

1

當剛開始使用rails時,我建議儘可能避免使用像#find這樣的自定義操作,而是堅持使用the "Big 7" RESTful routes。當你使用Rails時,Rails非常流暢,並且可以做到預期的效果。

這聽起來像你可能試圖識別給定的郵政編碼,然後列出所有與之相關的代理。這聽起來像是#showZipcode

配置/ routes.rb中

resources :zipcodes 

應用程序/控制器/ zipcodes_controller.rb

ZipcodesController < ApplicationController 
    def show 
    @zipcode = Zipcode.find_by_zip(params[:id]) 
    end 
end 

應用/視圖/郵編/ show.html.erb

<div> 
    <p>This zipcode has the following agents:</p> 
    <ul> 
    <%= @zipcode.agents.each do |agent| %> 
     <li>Agent #<%= agent.id %></li> 
    <% end %> 
    </ul> 
</div> 

您可以通過瀏覽到/zipcodes/[zip]來查看此頁面。

+0

標記此答案正確,讓我95%在那裏。這不正是我所需要的,但它幫助我重新思考我做事的方式。它讓我把事情翻轉了一下!感謝大家的意見! –

0

只需將@user_zip = Zipcode.find_by_zip(params[:zip])放在控制器中而不是模型中。

在視圖中,您將能夠撥打@user_zip

+0

明白了。現在我只需要弄清楚如何運行基於'@ user_zip.'的'zip.agents'部分就可以通過'@ user_zip.agents'來實現嗎?我有點困惑於如何告訴軌道用戶的輸入做些什麼。從設計轉到RoR真的讓我大開眼界。 –

+0

@DavidHubler你能告訴我們'代理人'的方法嗎? – Gerep

+0

@DavidHubler是 –

0

歡迎來到Rails!我最近也開始學習Rails,但我想我可以提供幫助:控制器操作將默認重定向到具有相同名稱的視圖。因此,在分配@user_zip的值後,控制器將提供agents/find.html.erb,它們將有權訪問@user_zip。由於@user_zip是Zipcode的一個實例,因此您可以使用@ user_zip.agents。

有些切線,但我也建議考慮使用搜索,而不是找到操作名稱,只是因爲查找及其變體在Rails的其他地方使用。

+0

陷阱。謝謝您的幫助!!這爲我澄清了一些事情。 –

+0

我很高興我的回答很有用? – ColetranePass

相關問題