我在我的模型中创建了一个自定义方法,它按名称查找记录:
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)
。任何帮助将不胜感激!
find_city
自定义方法会找到其名称与另一个地方的city_name匹配的地方,例如。
Place.name = "foo"
Place.city_name = "baz"
因此,Place.find_city
会将记录显示在Place.name = "baz"
。干杯!
答案 0 :(得分:0)
做这样的事情
将您的模型保持为
class City < ActiveRecord::Base
named_scope :by_name, lambda {|city|{:conditions => "name=#{city}"}}
end
控制器中的
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参数。
**通常我们不应直接从视图访问模型。要么我们应该通过控制器或助手
来做到这一点希望这有帮助
欢呼声
sameera
答案 1 :(得分:0)
我决定为这个问题创建一个帮助方法 - 我上面描述的可能看起来有点像非正统的方法,但我只需要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
方法是否返回记录。