has_many : find _or_initialize_by에 대한 브레이크를 통해
-
05-07-2019 - |
문제
나는 많은 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
경고 이것은 에어 코딩 된 테스트되지 않았습니다
제휴하지 않습니다 StackOverflow