ruby-on-rails - Rails 3 模型关注模块

标签 ruby-on-rails ruby-on-rails-3

首先,我遵循此处针对 Rails 问题找到的做法(好主意!):https://gist.github.com/1014971

但是我收到错误:

undefined method `search' for #<Class:0x5c25ea0>
app/controllers/accessories_controller.rb:6:in `index'

确实将我的/app/models/concerns/目录加载到/config/application.rb中。所以“关注”模块正在加载。只是想指出这一点。

这是我的代码:

/app/models/concerns/searchable.rb

module Searchable
  extend ActiveSupport::Concern

  # Add a "search" scope to the models
  def self.search (search)
    if search
      where('name LIKE ?', "%#{search}%")
    else
      scoped
    end
  end
end

/app/models/accessory.rb

class Accessory < ActiveRecord::Base
  include Searchable

  ...
end

/app/controllers/accessories_controller.rb

class AccessoriesController < ApplicationController

  def index
    @accessories  = Accessory.search(params[:search])

    ...
  end

end

最佳答案

好吧,经过一番尝试,我发现了问题所在!

当您想要直接从模块(关注点)内修改模型时,您需要将功能包装在 included block 中。

我已将我的关注模块更改为以下内容:

    module Searchable
        extend ActiveSupport::Concern

        included do
            # Add a "search" scope to the models
            def self.search (search)
                if search
                    where('name LIKE ?', "%#{search}%")
                else
                    scoped
                end
            end
        end

    end

就是这样!希望这能帮助其他有同样问题的人!

关于ruby-on-rails - Rails 3 模型关注模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11514744/

相关文章:

ruby-on-rails - rails : Active Admin Association Image column

ruby-on-rails - 从 GitHub 运行 Ruby on Rails 应用程序

javascript - :remote => true creating unknown format?

javascript - 如何从 rspec 集成测试中获取 nyc/istanbul JavaScript 覆盖率

ruby-on-rails - Rails, Has and belongs to many, 匹配所有条件

ruby-on-rails - 子文件夹中的 Rails 邮件程序和邮件程序 View 不起作用

mysql - 如何设计我的数据库?关于编辑历史

ruby-on-rails - 处理不兼容的字符编码 : UTF-8 and ASCII-8BIT

ruby-on-rails - 满足条件时的 Rails 验证

windows - JRuby on Rails 无法与在 Windows Server 2008 上作为服务运行的 Tomcat 一起使用