- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
"u-6ren">
我正在关注 Ryan 的 Omniauth with Devise rails 广播。部分代码是:
class User < ActiveRecord::Base
def self.from_omniauth(auth)
where(auth.slice(:provider, :uid)).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.username = auth.info.nickname
end
end
end
我在用 where().first_or_create do 挠头。这段代码究竟做了什么?
我的猜测是 where() 语句适用于类 User。但是 Rails 怎么知道它等价于 User.where(:provider => "provider_id pass by auth", :uid => "uid pass by auth")
?
我的猜测是它会产生一个集合,然后如果集合为空,则创建一个新实例 user
并分配新属性。否则选择第一个实例并重新分配属性。
我的猜测正确吗?
最佳答案
让我们把它分成几部分。
auth.slice(:provider, :uid)
auth 是一个包含 :provider 和 :uid 键的哈希。调用 .slice 进行身份验证会返回一个新的哈希,其中只有这些作为键。即
auth = { provider: 'foo', uid: 'bar', some_other_key: 'blah' }
new_hash = auth.slice(:provider, :uid) # { provider: 'foo', uid: 'bar' }
first_or_create
相当于find_or_create_by
。您可以阅读 documentation并看到它搜索与传递给 where
的选项匹配的任何记录。如果没有找到记录,它会尝试使用这些选项作为属性创建记录。
通过的 block
user.provider = auth.provider
user.uid = auth.uid
user.username = auth.info.nickname
实际上只需要最后一行。前两行是多余的,因为它在 where 选项中。
关于ruby-on-rails - Rails 异常语句 : where( ). first_or_create( ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15016612/
我真的很喜欢first_or_create方法: # Find the first user named Scarlett or create a new one with a particular
我正在使用 first_or_create 来填充一个包含电子邮件订阅者(称为成员)列表的表。代码如下: def community_members=(members) sel
我在 Rails 5.2 项目中使用以下代码: c = Country.where(name: "test").first_or_create c.status = "Old" c.save 这行得通
我有这个哈希,它是动态构建的: additional_values = {"grouping_id"=>1} 我想在通过 first_or_create 创建后将其与此记录对象合并: result =
我想区分由 first_or_create 搜索或创建。 record = MasterRecord.where(:name=>'test_data').firest_or_create # and
我的两个模型User和Submission如下: class User {:message => "Please enter a valid email address" } validates
我的应用程序的目标是仅显示包含现有数据的表单页面或新的空白表单。我通过使用在创建用户时创建空白记录的回调来完成此操作。 用户模型: before_create :build_health_profil
我像这样调用 first_or_create : collection = Collection.first_or_create(:title => title) 有没有办法确定结果是现有条目还是新创
我正在关注 Ryan 的 Omniauth with Devise rails 广播。部分代码是: class User "provider_id pass by auth", :uid => "u
我的模型表中有这个索引: UNIQUE KEY `index_panel_user_offer_visits_on_offer_id_and_panel_user_id` (`offer_id`,`p
您好,我有一个非常基本的 csv 导入器,用户可以使用它来导入项目。项目属于:part_number 当用户导入我要首先添加或创建的项目时,通过名称查找或创建零件号。我想要的 CSV 文件列 name
我有一个 ruby 脚本,可以将 XML 文件导入 MySQL 数据库。它通过循环遍历 XML 文件中的元素来完成此操作,最后 table.where( value: e['
是否有原生的 Sequel 方法来实现 Datamapper 的 first_or_create 方法? 或者我必须组合选择和插入吗? 最佳答案 我认为find_or_create应该适合你。 Lik
提前致歉,rails 新手。 某楼主有N条评论,一条评论有1条楼主 问题:为什么我不创建评论? (返回一个 nil 对象) 在 landlands_controller#create 中:如果凭据已在
first_or_create/first_or_create! 方法在 Rails 中有什么作用? 根据documentation , 方法“没有描述”... 最佳答案 来自Guides 先创建 f
在沙盒模式下通过 Heroku 控制台运行开发代码时,我使用 first_or_create 来测试记录是否存在: Right.where(:language => languag
我是 ActiveRecord 的新手,所以这可能是一个愚蠢的问题:我的方法是这样写的: sample_organizations = [ '37 Signals', 'Fog Creek'] sam
我正在尝试使用这个语句: @vote = Vote.where(:resource_id => params[:id], :user_id => current_user.id).first_or_c
我有用于 omni-auth 身份验证的 User 模型。我已对其进行设置,以便可以使用不同的提供商(如 facebook、google 帐户)进行登录。如果在使用这些提供商注册时电子邮件已在数据库中
为了便于解释,我将使用 SQLite 创建一个全新的 Rails (3.2.13) 项目。 rails new TestApp cd TestApp/ rake db:create rails g m
我是一名优秀的程序员,十分优秀!