gpt4 book ai didi

ruby-on-rails - 在设计用户注册时创建另一个模型

转载 作者:数据小太阳 更新时间:2023-10-29 07:59:35 25 4
gpt4 key购买 nike

我正在尝试在我的用户注册网站时创建一个配置文件模型。正如我现在所拥有的那样,Profile 模型是在使用正确的外键注册时创建的。我的问题在于在用户完成设计确认步骤后尝试更新配置文件模型。

我的用户被称为“艺术家”。

### /artists/registrations_controller.rb ###

class Artists::RegistrationsController < Devise::RegistrationsController
# GET /resource/sign_up
def new
super
@profile = @artist.build_artist_profile
end

# POST /resource
def create
super
@profile = @artist.create_artist_profile(profile_params)
end

private

def profile_params
params.permit(:biography, :location, :genre, :members, :facebook_url, :twitter_url, :youtube_url, :itunes_url, :amazon_url)
end

end

### /artists/profiles_controller ###

class Artists::ProfilesController < ApplicationController

before_action :authenticate_artist!
before_action :correct_artist
before_action :set_artist

def edit
@profile = ArtistProfile.find_by(params[:artist_id])
end

def update
@profile = ArtistProfile.find_by(params[:artist_id])
if @profile.update_attributes(profile_params)
redirect_to current_artist
else
redirect_to root_url
end
end

private

def set_artist
@artist = current_artist
end

def correct_artist
@artist = current_artist
if @artist != Artist.find(params[:id])
redirect_to artist_path
end
end

def profile_params
params.require(:artist_profile).permit(:biography, :location, :genre, :members, :facebook_url, :twitter_url, :youtube_url, :itunes_url, :amazon_url)
end

end

### /artist.rb ###

class Artist < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :lockable, :timeoutable
has_one :artist_profile, dependent: :destroy

### /artist_profile.rb ###

class ArtistProfile < ActiveRecord::Base
belongs_to :artist
validates :artist_id, presence: true
end

我把自己的代码放到了创建方法中的Devise注册 Controller 中。注册后,将创建 ArtistProfile 模型并填充空白字符串,这是完美的。但是,如果我尝试编辑/更新单个艺术家的个人资料,则只会更新第一个艺术家的个人资料。

即。艺术家 1 注册并创建配置文件 2。艺术家 1 通过编辑页面将 Profiles 1 的位置更新为 Buffalo。艺术家 2 注册并创建配置文件 2。艺术家 2 将配置文件 2 的位置更新为纽约,但更新的是配置文件 1 的位置,而不是配置文件 2 的位置。

这是在注册时创建模型的方法吗?如果是,我该如何修复编辑/更新方法?

或者有更好的方法吗?

最佳答案

您的这行代码不正确:

@profile = ArtistProfile.find_by(params[:artist_id])

解决方法是找到艺术家,然后获取个人资料:

@profile = Artist.find(params[:artist_id]).artist_profile

优化:

@artist = Artist.find(params[:artist_id]).includes(:artist_profile)
@profile = @artist.artist_profile

或者,如果您的 Controller 正在接收艺术家个人资料 ID,那么您可以执行此修复:

@profile = ArtistProfile.find(params[:artist_profile_id])

关于ruby-on-rails - 在设计用户注册时创建另一个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27866122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com