Domanda

Ho un modello, Feed, che ha e appartiene a molti utenti filtrati. In questo caso l'ho implementato attraverso una relazione has_many: through.

class Feed < ActiveRecord::Base
  has_many :denials, :dependent => :destroy
  has_many :filtered_users, :through => :denials

Vorrei creare un record se non esiste o trovare l'oggetto se esiste. Quando provo ad usare find_or_initialize_by (o find_or_create_by) viene generata un'eccezione che dice undefined method 'feed_id=' for <FilteredUser..

Ecco il codice:

feed = Feed.find(params[:id])
user = feed.filtered_users.find_or_initialize_by_user_url(params[:user_url])
if params[:status] == "block"
  feed.filtered_users << user
else
  feed.filtered_users.delete(user)
end
feed.save

Qualche suggerimento su come risolvere questo problema o su come aggirarlo SECCO?

Grazie!

È stato utile?

Soluzione

Innanzitutto, poiché è una relazione has_many :through, l'inizializzazione non ha modo di sapere a quale denial il nuovo filtered_user dovrebbe essere associato. Se si desidera utilizzare find_or_initialize_by, è necessario eseguirlo su un feed specifico associato a <=>.

Crea un nuovo filtered_user e associalo a un rifiuto specifico.

Secondo, concordando con ErsatzRyan, la logica generale sembra un po 'off.

Altri suggerimenti

Non sarebbe più facile controllare prima i parametri [: status] e poi fare ciò che devi fare?

feed = Feed.find(params[:id])
if params[:status] == 'block'
   feed.filtered_users.build(:user_url => params[:user_url])
else
   feed.filtered_users.find_by_user_url(params[:user_url]).delete
end
feed.save

avviso di codifica aerea non testata

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top