【问题标题】:Rails 3: Aliasing attribute names in meta_searchRails 3:meta_search 中的别名属性名称
【发布时间】:2010-12-08 18:24:21
【问题描述】:

我使用meta_search如下:

# app/controllers/articles_controller.rb
def index
  @search = Article.search(params[:search])
  @articles = @search.all
end

# app/views/articles/index.html.erb
<%= form_for @search, :url => articles_path, :html => {:method => :get} do |f| %>
  <%= f.text_field :my_very_long_attribute_name_contains %><br />
  <%= f.submit %>
<% end %>

通过允许搜索“my_very_long_attribute_name”属性,这可以按预期工作。

问题是,?search[my_very_long_attribute_name_contains] 出现在查询字符串中。将较短名称映射到此属性的最佳方法是什么?即?search[mvlan_contains]

这不仅仅是想让长属性名称更短的情况,而且我还需要伪装一些潜在敏感属性的名称以进行搜索。

我查看了alias_attribute,但无法让 meta_search 识别属性别名。

我欢迎任何建议。

【问题讨论】:

  • 我自己没用过,但是看看README的“访问自定义搜索方法”部分-github.com/ernie/meta_search
  • 谢谢。虽然这很有用,但它不能让我为我的属性创建别名。

标签: ruby-on-rails ruby-on-rails-3 meta-search


【解决方案1】:

您可以按照 rspeicher 的建议进行操作。自定义搜索方式将显示在您的参数列表中。

Re:您的属性中的敏感信息,但是...如果有人知道您在视图中的属性名称会给您的应用程序带来潜在问题,我会认真考虑在您的模型和控制器层中采取了哪些安全措施。

【讨论】:

  • 我已将def mvlan; my_very_long_attribute_name; endsearch_methods :mvlan 添加到我的模型中,但是当我尝试在我的视图中使用&lt;%= f.text_field :mvlan_eq %&gt; 时,我得到了“未定义的方法”。我做错了什么?
  • 您正在添加 eq.当您定义自定义方法时,您是在说您想控制参数在代码中的使用方式。没有 _eq 添加。您应该自己处理关系修改,然后返回该关系以进行链接。
  • 我不能使用search_methods 来执行此操作。还有另一种方法可以实现这一目标吗?出于兴趣,如果我使用alias_attribute :mvlan, :my_very_long_attribute_name,为什么我不能在我的视图中使用&lt;%= f.text_field :mvlan_eq %&gt;
  • MetaSearch 属性绑定到列,因为它们需要类型信息。在我的时间里,我开发了很多 Rails 应用程序,从来没有被 alias_attribute 困扰过,所以我不确定它是否保留了这些信息。我可以对此进行检查,但如果属性名称知识对您的应用程序构成真正的风险,我再次强烈建议您检查控制器/模型级别的安全性。
  • 如果它是可以轻松添加的东西,我将不胜感激。您在创建 MetaSearch 方面做得非常出色——这是我遇到的唯一困难。属性名称本身并不是敏感的,而是它们反映了我正在使用的第三方数据提供者的名称。如果可能的话,我想隐藏这些名称,以便用户无法建立连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多