Я создаю приложения в Ruby, и у меня есть две модели классовЗапросы в contoller- ROR
class Restaurant < ActiveRecord::Base
attr_accessible :title, :cuisine, :price_range, :environment
self.primary_key = 'title'
has_many :environments
end
end
class Environment < ActiveRecord::Base
attr_accessible :title, :type
belongs_to :restaurants,foreign_key: 'title'
end
Я пытаюсь запросить две таблицы в контроллер- вернуться рестораны с определенными средами.
@restaurants = Restaurant.joins('INNER JOIN environments ON restaurants.title=environments.title').where('environments.env_type'=> @selected_environment)
Примечание: @selected_environment хэш содержал список сред. В таблице окружения есть список пар для окружающей среды и ресторана (может быть более одного ресторана). Я знаю, что указанный выше запрос неверен для достижения моей цели. Есть ли способ, которым я могу это сделать?
метод контроллера:
def index
# can later be moved to the Restaurant model
ordering = {:title => :asc}
@all_environments = Restaurant.all_environments
@selected_environments = params[:environments] || session[:environments] || {}
if @selected_environments == {}
@selected_environments = Hash[@all_environments.map {|environment| [environment, environment]}]
end
if params[:environments] != session[:environments]
session[:environments] = @selected_environments
redirect_to :environments => @selected_environments and return
end
@restaurants = Restaurant.joins(:environments).where(environments:{env_type: @selected_environments.keys })
end
Я думаю, что вы смоделировали ваш данные некорректно, и это может быть источником некоторых из ваших проблем. Можете ли вы привести несколько примеров данных? (например, рестораны, среды и отношения между ними?) Кроме того, есть ли какая-то конкретная причина, по которой вы выбрали «название» в качестве основного ключа по idiomatic «id»? –
Да, я ответил на это, но, прочитав это, вы пытаетесь выполнить запрос после того, как кто-то выбрал выбранную среду для ui? – DustinFisher
Да DustinFisher, который является правильным – noob