首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何查看模型是否存在,如果模型不存在,如何创建?

如何查看模型是否存在,如果模型不存在,如何创建?
EN

Stack Overflow用户
提问于 2018-08-03 06:07:45
回答 2查看 93关注 0票数 -1

我正在尝试实现一个具有以下行为的表单:

1)输入用户的一些语义数据(即用户名)。2)执行User.find_by(:用户名=用户名)。3)如果存在这样的用户,则直接显示该用户的页面。4)如果这样的用户不存在,使用提供的用户名创建一个新用户,然后重定向到该用户的显示页面。

这应该很简单,但我不知道如何格式化form_for帮助器和我的显示,并在我的user_controller中创建操作来实现此行为。

我目前有:

form_with :url => 'users/:id',:方法=> :get do ...结束

因为我最终尝试调用控制器的"show“方法。但是,我的表单不接受用户的id作为参数,并且当用户还不存在时,在表单提交时没有:id参数可供访问。

我如何设置我的表单在每种情况下都重定向到显示,同时仍然遵循上面解释的逻辑?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-03 07:24:22

您可以在用户的Controller create操作中执行类似的操作

代码语言:javascript
复制
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)可以接受一个块。因此,您可以像这样将其他属性分配给新用户...

代码语言:javascript
复制
User.where(username: usr_name).first_or_initialize do |usr|
  usr.some_attribute = some_value
end
票数 0
EN

Stack Overflow用户

发布于 2018-08-03 13:17:12

您可以使用find_or_initialize_by(unique_key)在您的创建method.unique_key可以是任何关键字,您可以用来识别您的用户,如电子邮件,电话等。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51662789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档