0

많은 갤러리와 카테고리 (둘 다 belongs_to : user 인 개별 모델)가있는 사용자 모델이 있습니다. "Everything"이라는 기본 범주와 "Everything"이라는 기본 갤러리를 만들고 싶습니다.@ 사용자가 활성화되면 해당 사용자에 속한 객체를 생성하십시오.

내 앱, 특히 사용자 생성 및 활성화 부분에 대한 Mike Hartl의 튜토리얼을 적용하고 있습니다. 따라서, 사용자가이 코드를 사용하여 만든 후 :

User.rb 

def create 
    @user = User.new(user_params) 
    if @user.save 
     @user.send_activation_email 
     flash[:info] = 'Please check your email to activate your account.' 
     redirect_to root_url 
    else 
     render 'new' 
    end 
end 

기동 이메일이 사용자에게 전송하고이 링크를 클릭하면 그것은 자신의 계정을 활성화합니다. 활성화 시점에서 activated 열이 false에서 true으로 전환되므로 "모든 것"갤러리와 카테고리를 생성하고 싶습니다. 내 마음 속에서 이것이 일어날 수있는 가장 논리적 인 곳은 한 번만 발동 될 가능성이 있기 때문입니다. 그렇게하면 누군가가 자신의 계정에 로그온 할 때마다 만들어지는 "Everything"카테고리와 갤러리에 대해 걱정할 필요가 없습니다.

나는이를 만들려고 오전 방법은 계정이 활성화 직후 다음 코드를 삽입하는 것입니다 :

account_activations_controller.rb 
class AccountActivationsController < ApplicationController 
    def edit 
     user = User.find_by(email: params[:email]) 
     if user && !user.activated? && user.authenticated?(:activation, params[:id]) 
      user.activate 
      user.categories = user.categories.build(name: 'Everything') 
      log_in user 
      flash[:success] = 'Account activated!' 
      redirect_to user 

     else 
      flash[:danger] = 'Invalid activation link' 
      redirect_to root_url 
     end 
    end 
end 

내 문제가 있다는 것입니다 :이,

user.categories = user.categories.build(name: 'Everything') 

그래서 그 모습을 사용자가 생성되는 동안 "모든 것"카테고리가 아니므로 조정할 수없는 다음 오류가 표시됩니다.

NoMethodError at /account_activations/0hbg0T33tjQlleiwKqvUDg/edit 
undefined method `each' for #<Category:0x00000004f95b60> 

이 과정에서 '각'이 어디에 호출 될지 알 수 없습니다.

갤러리 및 카테고리 생성과 사용자 활성화에 대해 언급했지만 위 코드는 카테고리 만 처리합니다. 제가 일할 카테고리를 얻을 수 있다면 비슷한 솔루션을 사용하여 갤러리를 작동시킬 수 있어야합니다. 이것은 어떤 조치를 생성의 나하는 카테고리처럼 보이는 것입니다 :

def new 
    @category = current_user.categories.build 
    end 

    def create 
    @category = current_user.categories.create(category_params) 
    if @category.save! 
     respond_to do |format| 
     format.html 
     format.js 
     end 

    end 
    end 

내 문제와 관련된 몇 가지 질문이 있습니다

  1. 첫 번째 이유는 nomethod 오류가 점점 오전의 가장 명백하다 카테고리와 관련된 '각'메소드가없는 것 같습니까?

  2. 이 문제에 올바르게 접근하고 있습니까? 코드의 다른 곳에서 기본 카테고리 및 갤러리를 생성해야합니까? 내가 에 관한 약간의 글을 읽었는데, 사용자의 activated 컬럼에서 사용하려고 시도했지만, 어떻게 사용하는지 알 수는 없다.

제공 할 수있는 도움이 있으면 크게 감사드립니다.

답변

0

내가 잘못한 것을 알았습니다. 카테고리/단일 객체 대신에 카테고리/배열을 만들려고했습니다.당신은 user.categoriesuser.categories.build(name: 'Everything')의 결과를 할당하려고

user.categories << user.categories.create(name: 'Everything') 
1

이에

user.categories = user.categories.build(name: 'Everything') 

:이를 돌았 다. user.categories.build(name: 'Everything')은 자신의 새 레코드를 만듭니다. 더 이상 user.categories에 지정할 필요가 없습니다. 이렇게하려고하면 Rails가 user.categories.build(name: 'Everything')의 결과를 반복하도록합니다. 이는 Category이며 컬렉션이 아닙니다.

user.categories = user.categories.build(name: 'Everything') 

로 :

user.categories.build(name: 'Everything') 

대답이 얼마나 많은 다른 장소 및/또는 사용자가 될 수있는 방법에 따라 질문

그래서 질문 1에 대한 해결책을 대체하는 것입니다 활성화되었습니다. 정품 인증을위한 컨트롤러 조치가 유일한 경우 솔루션이 정상입니다. 하지만 콘솔에서 다른 방법으로 사용자를 활성화하려면 User의 ActiveRecord 콜백 (예 : :after_save)을 사용하고 user.activated_changed? && user.activated?을 확인한 다음 여기에서 일반 카테고리 및 갤러리를 생성하는 것이 더 나을 것입니다. .

두 경우 모두 사용자를 생성하기 전에 일반 범주 및 갤러리가 사용자에 대해 이미 존재하지 않는지 (일단 활성화되고 비활성화 된 경우) 확인하는 것이 좋습니다.

관련 문제