2014-12-31 3 views
0

Привет, я немного привязан сюда, потому что я пытаюсь использовать scope и can not, похоже, заставить его работать.rails 4.1.6 scope: в модели не отвечает должным образом

Теперь я использую его в своем разделе модели.

has_many :friends, through: :user_friendships, 
        scope -> {where(user_friendships: { state: 'accepted' })} 

также, прежде чем я использовал его как и от turorials и я узнал, что это был depricated и пришлось заново настроить код, который я использовал выше, но проблема в том, что он также обнаружил ошибку

has_many :friends, through: :user_friendships, 
       conditions: { user_friendships: { state: 'accepted' }} 

это была ошибка, что я столкнулся при использовании в первой строке кода, а вторая строка кода в терминале

/home/simplybel/.rvm/gems/ruby-2.1.2/gems/activesupport-4.1.6/lib/active_support/core_ext/hash/keys.rb:71:in `block in assert_valid_keys': Unknown key: :scope. Valid keys are: :class_name, :class, :foreign_key, :validate, :autosave, :table_name, :before_add, :after_add, :before_remove, :after_remove, :extend, :primary_key, :dependent, :as, :through, :source, :source_type, :inverse_of, :counter_cache, :join_table (ArgumentError) 

если кто-нибудь может помочь мне с этой проблемой было бы повторно союзник будет большим и оцененным! также я немного noob в рельсах, поэтому я не могу правильно понять синтаксис, который вы могли бы добавить в ответ, поэтому вы можете использовать PLS. сделайте это noob дружелюбным и спасибо!

ответ

3

Вам не нужно слово scope. Лямбда должна просто быть дана в качестве второго аргумента has_many:

has_many :friends, ->{ where(user_friendships: { state: 'accepted' }) }, 
        through: :user_friendships 

Вы можете увидеть больше примеров в Active Record Assocations Rails Guide.

Edit: Вот метод подписи из docs for has_many:

has_many(name, scope = nil, options = {}, &extension)

В коде:

  1. :friends является name аргумент
  2. ->{ where(...) } является scope аргумента
  3. { through: :user_friendships } является options аргументом (но рубин позволяет нам опускать {} для Hash, когда это последний аргумент).
+0

привет спасибо за исправления он теперь работает должным образом в настоящее время пытается сделать это условия: {состояния: «в ожидании»} и пытался как ваш ответ, как это: has_many: pending_user_friendships, class_name: «UserFriendship», \t \t \t \t \t \t \t \t \t \t foreign_key:: user_id, \t \t \t \t \t \t \t \t \t \t -> {где (user_id: {состояние: 'в ожидании'})}, очевидно, оно не горе rk, как и ожидалось. – user1868185

+0

Как я уже сказал, лямбда (бит '-> {...}') должен быть вторым аргументом, т. е. после ': pending_user_friendships' и перед' class_name: ... '. –

+0

спасибо за совет, помните об этом! – user1868185

Смежные вопросы