我正在尝试实现一个具有以下行为的表单:
1)输入用户的一些语义数据(即用户名)。2)执行User.find_by(:用户名=用户名)。3)如果存在这样的用户,则直接显示该用户的页面。4)如果这样的用户不存在,使用提供的用户名创建一个新用户,然后重定向到该用户的显示页面。
这应该很简单,但我不知道如何格式化form_for帮助器和我的显示,并在我的user_controller中创建操作来实现此行为。
我目前有:
form_with :url => 'users/:id',:方法=> :get do ...结束
因为我最终尝试调用控制器的"show“方法。但是,我的表单不接受用户的id作为参数,并且当用户还不存在时,在表单提交时没有:id参数可供访问。
我如何设置我的表单在每种情况下都重定向到显示,同时仍然遵循上面解释的逻辑?
发布于 2018-08-03 07:24:22
您可以在用户的Controller create操作中执行类似的操作
def create
usr_name = params[:username]
@user = User.where(username: usr_name).first_or_initialize
if @user.persisted?
redirect_to user_path(@user) # or whatever your user show path is
elsif @user.save
redirect_to user_path(@user)
else
render :new
end
end
您只需确保您正在验证用户名的唯一性。
此外,first_or_initialize
(及其对应的first_or_create
)可以接受一个块。因此,您可以像这样将其他属性分配给新用户...
User.where(username: usr_name).first_or_initialize do |usr|
usr.some_attribute = some_value
end
发布于 2018-08-03 13:17:12
您可以使用find_or_initialize_by(unique_key)在您的创建method.unique_key可以是任何关键字,您可以用来识别您的用户,如电子邮件,电话等。
https://stackoverflow.com/questions/51662789
复制相似问题