0

Rails 4 にアップグレードしたら、アプリにユーザーを登録できなくなりました。私のギャラリー(carrierewave)が故障したようです。私はコードを調べましたが、現在の動作を妨げるものは何もありません。未定義のメソッド `galleries' を取得し、def setup_gallery: self.galleries << Gallery.create を指し、def create: if @user.save の下

私のコードに新鮮な目があれば素晴らしいでしょう。

ユーザーコントローラー:

 class UsersController < ApplicationController
  respond_to :html, :json

  def settings
    @user = User.find(id_params)
  end

  def new
    @user = User.new
  end

  def profile
    @profile = User.profile
  end

  def create
    @user = User.new(user_params)
    if @user.save
      UserMailer.registration_confirmation(@user).deliver
      session[:user_id] = @user.id
      redirect_to root_url, notice: "Thank you for signing up!"
    else
      render "new"
    end
  end

  def show
    @user = User.find(id_params)
  end

    def edit
      @user = User.find(id_params)
end

  def index
    @users = User.all
  end

  def destroy
     User.find(id_params).destroy
     flash[:success] = "User deleted."
     redirect_to users_url
   end

def update
    @user = if current_user.has_role?(:admin)
       User.find(id_params)
     else
       current_user
     end
    @user.update_attributes(user_params)
    respond_with @user
    end

    private


      def user_params
   params.require(:user).permit(:name, :email, :username, :password, :zip_code, :birthday, :role)
 end

     def id_params
       params.require(:id).permit(:name)
     end
end

ユーザーモデル:

# models/user.rb
  after_create :setup_gallery

  def received_messages
      Message.received_by(self)
    end

 def unread_messages?
   unread_message_count > 0 ? true : false
 end

 def unread_messages
   received_messages.where('read_at IS NULL')
 end

 def sent_messages
   Message.sent_by(self)
 end

 # Returns the number of unread messages for this user
 def unread_message_count
   eval 'messages.count(:conditions => ["recipient_id = ? AND read_at IS NULL", self.user_id])'
 end

  def to_s; username
  end

  def has_role?(role_name)
    role.present? && role.to_sym == role_name.to_sym
  end

  def send_password_reset
    generate_token(:password_reset_token)
    self.password_reset_sent_at = Time.zone.now
    save!
    UserMailer.password_reset(self).deliver
  end

  def generate_token(column)
    begin
      self[column] = SecureRandom.urlsafe_base64
    end while User.exists?(column => self[column])
  end

  private
  def setup_gallery
     self.galleries << Gallery.create
   end
end

写真コントローラー:

class PhotosController < ApplicationController

  def new 
    @photo = Photo.new
  end

  def create
    @photo = Photo.new(photo_params)
    @photo.user = current_user
    if @photo.save
      flash[:notice] = "Successfully created photos."
      redirect_to :back
    else
      render :action => 'new'
    end
  end

  def edit
    @photo = Photo.find(id_params)
  end

  def update
    @photo = Photo.find(id_params)
    if @photo.update_attributes(photo_params)
      flash[:notice] = "Successfully updated photo."
      redirect_to @photo.gallery
    else
      render :action => 'edit'
    end
  end

  def destroy
    @photo = Photo.find(id_params)
    @photo.destroy
    flash

[:notice] = "写真の破棄に成功しました。" redirect_to @photo.gallery end

プライベート

def user_params params.require(:user).permit(:name) end

def id_params params.require(:id).permit(:name) end end

4

1 に答える 1

1

試行錯誤の結果、ユーザー モデルのプライベート メソッドを変更する必要があることがわかりました。

機能するのは、

 Gallery.create(user: self)

助けてくれた人ありがとう!

于 2013-08-12T16:37:51.510 に答える