Pregunta

Tengo un modelo, Feed, que tiene y pertenece a muchos usuarios filtrados. En este caso lo he implementado a través de una relación has_many: through.

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

Me gustaría crear un registro si no existe o encontrar el objeto si existe. Cuando intento usar find_or_initialize_by (o find_or_create_by), se produce una excepción que dice undefined method 'feed_id=' for <FilteredUser..

Aquí está el código:

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

¿Alguna sugerencia sobre cómo solucionar esto o cómo solucionarlo SECO?

¡Gracias!

¿Fue útil?

Solución

Primero, debido a que es una relación has_many :through, la inicialización no tiene forma de saber a qué denial se debe asociar la nueva filtered_user. Si desea utilizar find_or_initialize_by, debe ejecutarlo en un feed específico asociado con <=>.

Cree un nuevo user_filtrado y asócielo con una negación específica.

En segundo lugar, de acuerdo con ErsatzRyan, la lógica general parece un poco extraña.

Otros consejos

¿No sería más fácil verificar los parámetros [: estado] primero y luego hacer lo que necesita hacer?

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

advertencia de que esto está codificado por aire no probado

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top