Поиск НРАВИТСЯ? только если он соответствует требованиям Certan? - PullRequest
1 голос
/ 10 декабря 2011

Прошу прощения за любую мою терминологию, если она выключена. В моей модели я пытаюсь определить метод, который будет искать 2 столбца, если другой столбец (логический) не является истинным.

class BusinessStore < ActiveRecord::Base
  attr_accessible :business_name, :address, :online_store, :website

  def store
    "#{business_name} - #{address}" 
  end
end

:business_name - это виртуальный атрибут, :online_store - это логический столбец.

Я хочу взять :online_store и создать метод, подобный этому:

def store
 "#{business_name} - #{address}" unless business_store.online_store = true
end

Таким образом, он не должен показывать бизнес-магазины, которые помечены как истинные для того, чтобы быть онлайн-магазинами, потому что я ищу только розничные магазины; магазины с адресами. Вот моя модель контроллера. Просто для пояснения, BusinessStore.where должен пропустить поиск магазинов с online_store = true

class BusinessStoresController < ApplicationController

  def index
    @business_stores = BusinessStore.all
    @business_stores = BusinessStore.where("address like ?", "%#{params[:q]}%")

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @business_stores }
      format.json { render :json => @business_stores.collect{|b|{:id => b.id, :name => b.store } } }
    end
  end
end

Это не работает, потому что мой business_stores.json получает ошибку NameE:

http://localhost:3000/business_stores.json
NameError in BusinessStoresController#index

undefined local variable or method `business_store' for...

Как вы это определили?

1 Ответ

2 голосов
/ 10 декабря 2011

Я думаю, вы спрашиваете о двух разных вещах.Если вы хотите получить все физические хранилища, где online_store != true, вы можете просто определить область для этого.

class BusinessStore < ActiveRecord::Base
  attr_accessible :business_name, :address, :online_store, :website
  scope :stores, where(:online_store => false)
  # or alternately
  scope :alternate_stores, where("online_store IS NOT NULL")
  # depending on default values
end

Однако это не исключает его из метода where ().Вы МОЖЕТЕ перегрузить этот метод, но я не думаю, что эта ситуация требует этого.

def store
  "#{business_name} - #{address}" unless business_store.online_store = true
end

Приведенный выше код работает просто отлично, если вы этого хотите (понимаете, что я имею в виду, спрашивая о двух вещах?).Вам просто нужно изменить его на

"#{business_name} - #{address}" unless self.online_store == true

Ошибка, которую вы видите, состоит в том, что у вас нет объекта с именем business_store, вместо этого вы должны получить доступ к переменной самого объекта.И вам нужен double =, в противном случае вы фактически устанавливаете переменную в true, что в Ruby будет истинным в глазах if /, если только.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...