문제

나는 많은 filtersusers에있는 모델, 피드를 가지고 있습니다. 이 경우 나는 관계를 통해 has_many를 통해 그것을 구현했습니다.

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

레코드가 존재하지 않으면 레코드를 만들거나 객체가 존재하는 경우 객체를 찾으려고합니다. find_or_initialize_by (또는 find_or_create_by)를 사용하려고 할 때 예외가 발생합니다. undefined method 'feed_id=' for <FilteredUser..

코드는 다음과 같습니다.

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

이 문제를 해결하는 방법 또는 건조한 작업 방법에 대한 제안이 있습니까?

감사!

도움이 되었습니까?

해결책

첫째, a has_many :through 관계, 초기화는 denial 새로운 filtered_user 관련되어야합니다. 사용하려면 find_or_initialize_by, 당신은 그것을 구체적으로 실행해야합니다 denial 그것은 feed.

새로운 필터링 _user를 구축하고 특정 거부와 연결하십시오.

둘째, Ersatzryan과 동의하면서 일반적인 논리는 약간 벗어난 것 같습니다.

다른 팁

먼저 params [: status]를 확인하고해야 할 일을하는 것이 더 쉽지 않습니까?

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

경고 이것은 에어 코딩 된 테스트되지 않았습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top