2010-08-25 78 views
1

我已經在我的模型,它通過名稱找到記錄創建自定義方式重定向:自定義方法在Rails的

def find_city 
    Place.find_by_name(city_name) 
end 

我可以在我的place_path(@place.find_city)觀點,調用此方法偉大的工程,當一個地方與適當的名稱存在。我希望能夠做的是寫入一個重定向,當這個地方不存在時,我不確定邏輯應該在哪裏。基本上,我想編寫類似:

respond_to do |format| 
    if @place.find_city.blank? 
    format.html { redirect_to :action => "new" } 
    else 
    format.html { render :action => "show" } 
    end 
end 

...但我還是想控制器對place_path(@place)以及響應以通常的方式。任何幫助將非常感激!

編輯:抱歉的混亂,應該進一步解釋我的例子。我有一個同時具有'city_name'和'name'屬性的Place模型。我上面詳述的find_city自定義方法查找其名稱與另一個地方的city_name匹配的地方,例如。

Place.name = "foo" 
Place.city_name = "baz" 

因此,因此Place.find_city給人的記錄,其中Place.name = "baz"。乾杯!

+0

您如何知道用戶是否想要訪問@place或訪問@place城市?我想你需要更好地解釋你想做什麼..我真的無法得到它..當你做一個place_path(@place)你想讓用戶重定向到城市或@place?他們是一樣的想法嗎?對不起,我真的很困惑=) – robertokl 2010-08-25 18:27:12

+0

我已經在上面添加了一些澄清,對於混淆抱歉! – Budgie 2010-08-25 19:03:31

回答

0

我已經決定創建一個helper方法,對於這個問題 - 什麼我上面描述的威力似乎有點不正常,但我只需要用find_city方法爲每個地方創建一個鏈接欄,所以我不認爲我真的需要創建一個單獨的城市模型,或者定義一個正式的自我指涉關係。萬一有人可能會發現這個有用,我創建了一個links_bar幫手:

module PlacesHelper 

    def links_bar(place) 
    if place.city_name.blank? 
     render "no_city_links" 
    elsif place.find_city.nil? 
     render "nil_find_city_links" 
    else 
     render "complete_links" 
    end 
    end 

end 

每個部分都有然後根據find_city方法是否返回記錄或沒有必要的行爲。

0

在控制器

class CitiesController < ApplicationController 


    def index 

    @city = City.by_name(<city name>) 

    if @city.nil? 

     <redirect to one place> 

    else 

     <redirect to another place> 

    end 

    end 

end 

,並在您的視圖訪問@city參數做這樣的事

保持你的模型

class City < ActiveRecord::Base 

    named_scope :by_name, lambda {|city|{:conditions => "name=#{city}"}} 

end 

**通常我們不應該直接從視圖訪問模型。無論是我們應該做的是通過控制器或助手

希望這有助於

歡呼

sameera

+0

感謝您的回覆 - 我其實沒有City模型,對不起,我應該更好地解釋我的問題!我已經在上面添加了一個說明。抱歉! – Budgie 2010-08-25 19:05:34

+0

嗨 在這種情況下,你可以用城市替換城市,並應該工作。 歡呼聲 sameera – sameera207 2010-08-26 03:42:11