帮助中的ActiveRecord

时间:2011-02-14 19:50:49

标签: ruby-on-rails helpers

这是我第一次使用rails helper,并且没有找到很多关于如何在helper中输出activerecord搜索的文档。

我拥有的是任务表单,任务可以有一个位置。我不希望用户输入位置,而是使用带有自动填充的文本框,用户可以在其中搜索位置。当用户选择位置时,我使用location_id填充隐藏的“location_id”字段。

我正在使用jQuery jsonSearch进行自动填充,因此我必须在页面加载时将所有位置表字段输出到javascript对象中。

我认为我的助手就像是

module TaskHelper

  def location_search
    @location = Location.search("location_id, address")
    @location.include_root_in_jason=false
  end

end

然后在我的_form.html.erb中我有

var locations=<%= raw location_search.to_json %>;

这是使用助手的错误方法吗?我也试过没有@location但我只是继续获取​​var locations = false;

我认为最好不要将查询放入tasks_controller中,因为当我这样做时,所有显示为任务/编辑和放大的部分的位置都是如此。任务/新对象,我认为这很糟糕。

1 个答案:

答案 0 :(得分:3)

方法返回Ruby中的最后一个表达式。

因此,要有一个返回位置列表的方法,请确保最后一个表达式返回列表。简单地将@location放在最后一行就应该这样做。然后它使用局部变量。

但是,您应该将集合放入控制器中的实例var中,并使用它而不是在帮助程序中使用Active Record。将模型代码放在帮助程序中会使查找很困难,并且通常将控制器作业视为使用模型代码。

只需在控制器中说出@location_json = Location.search(&#34; location_id,address&#34;),然后就可以在模板中使用@location_json var。