2010-08-25 69 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