运行 创建不同模型的操作时更新用户 table
Update users table when running create action of different model
只是为了告诉你我是如何走到这一步的:
每个用户都有很多配置文件。每个配置文件都有由单一 table 继承(业余、专业和其他)识别的类型。我需要以某种方式将 current_profile 存储在某个地方。
专业控制器
class ProfessionalsController < ApplicationController
def create
@professional = Professional.new(professional_params)
@user = current_user
@professional.user_id = current_user.id
@update_current_profile = User.update(@user, {:current_profile => @professional.id})
if @professional.save
...
else
...
end
end
private
def professional_params
params.require(:professional).permit(:id, :username, :user_id)
end
end
这是为了将 current_profile 用户更新为新创建的专业配置文件,然后进行一些工作。
创建配置文件时 current_profile 设置(更新)为 NULL。如果我改变:
@update_current_profile = User.update(@user, {:current_profile => @professional.id})
不同的东西,例如:
@update_current_profile = User.update(@user, {:current_profile => @professional.user_id})
或
@update_current_profile = User.update(@user, {:current_profile => 3})
它在 User.current_profile 中完美地存储数据。
我也在尝试没有 .id 的@professional。为什么这样做?
另一个问题是。这是存储用户 current_profile 的最佳方式吗?你能给我推荐任何 better/safer/more 有效的解决方案吗?
谢谢大家。
@professional
是一个新的、未保存的记录,因此还没有 id
。保存 @professional
记录后,只能更新 current_profile
。
只需稍微重新排序这些行,它应该可以工作:
def create
@professional = Professional.new(professional_params)
@user = current_user
@professional.user_id = current_user.id
if @professional.save
@update_current_profile = User.update(@user, {:current_profile => @professional.id})
# ...
else
# ...
end
end
另一个提示:您在此方法中使用了许多实例变量(带有 @
的实例变量)。我对你的代码了解不够,但我建议看看其中的一些代码是否可以用局部变量替换。经验法则:当您想要与另一个方法或视图共享该变量时,仅在控制器中使用实例变量。
只是为了告诉你我是如何走到这一步的:
每个用户都有很多配置文件。每个配置文件都有由单一 table 继承(业余、专业和其他)识别的类型。我需要以某种方式将 current_profile 存储在某个地方。
专业控制器
class ProfessionalsController < ApplicationController
def create
@professional = Professional.new(professional_params)
@user = current_user
@professional.user_id = current_user.id
@update_current_profile = User.update(@user, {:current_profile => @professional.id})
if @professional.save
...
else
...
end
end
private
def professional_params
params.require(:professional).permit(:id, :username, :user_id)
end
end
这是为了将 current_profile 用户更新为新创建的专业配置文件,然后进行一些工作。
创建配置文件时 current_profile 设置(更新)为 NULL。如果我改变:
@update_current_profile = User.update(@user, {:current_profile => @professional.id})
不同的东西,例如:
@update_current_profile = User.update(@user, {:current_profile => @professional.user_id})
或
@update_current_profile = User.update(@user, {:current_profile => 3})
它在 User.current_profile 中完美地存储数据。
我也在尝试没有 .id 的@professional。为什么这样做?
另一个问题是。这是存储用户 current_profile 的最佳方式吗?你能给我推荐任何 better/safer/more 有效的解决方案吗?
谢谢大家。
@professional
是一个新的、未保存的记录,因此还没有 id
。保存 @professional
记录后,只能更新 current_profile
。
只需稍微重新排序这些行,它应该可以工作:
def create
@professional = Professional.new(professional_params)
@user = current_user
@professional.user_id = current_user.id
if @professional.save
@update_current_profile = User.update(@user, {:current_profile => @professional.id})
# ...
else
# ...
end
end
另一个提示:您在此方法中使用了许多实例变量(带有 @
的实例变量)。我对你的代码了解不够,但我建议看看其中的一些代码是否可以用局部变量替换。经验法则:当您想要与另一个方法或视图共享该变量时,仅在控制器中使用实例变量。