- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的应用程序的目标是仅显示包含现有数据的表单页面或新的空白表单。我通过使用在创建用户时创建空白记录的回调来完成此操作。
用户模型:
before_create :build_health_profile
但是,如果出于某种原因,用户“health_profile”被销毁或不存在,它会破坏我的整个应用程序:
"nil:NilClass 的未定义方法 `health_profile'"
有人向我提到“first_or_create”方法可以通过显示新表单或查找现有表单来解决此问题,但我无法保存字段。它通过我的保存警报定向到我的根目录,就像它已保存一样,但实际上没有保存任何内容。
Controller :
class HealthProfilesController < ApplicationController
def new
@health_profile = current_user.build_health_profile
end
def create
@health_profile = HealthProfile.where(user_id: current_user).first_or_create(health_profile_params)
if @health_profile.save
flash[:success] = "Health profile saved."
redirect_to root_path
else
render 'new'
end
end
private
def health_profile_params
params.require(:health_profile).permit(
:age,
:weight,
:height,
:gender
)
end
end
我已经看到我可以在哪里使用 block 来“first_or_create”,但没有运气让它起作用。
查看:
<%= link_to "Health Profile", new_health_profile_path %>
型号:
class User < ActiveRecord::Base
has_one :health_profile, dependent: :destroy
end
class HealthProfile < ActiveRecord::Base
belongs_to :user
end
最佳答案
如果您使用 first_or_create然后调用 save
方法作为记录的一部分,并尝试将其保存在数据库中。如果无法保存记录,则事务回滚。所以,你想使用:first_or_initialize这里就像 new
并且不会立即将记录保存在数据库中。它只是加载数据。因此,您可以在代码的下一行调用 save
。
所以,在你的代码中,你有:
@health_profile = HealthProfile.where(user_id: current_user).first_or_create(health_profile_params)
这里你没有控制 save
部分,这已经由 first_or_create
方法完成了。
因此,您实际上只想使用 first_or_initialize
加载对象(尚未保存):
@health_profile = HealthProfile.where(user_id: current_user).first_or_initialize(health_profile_params)
然后,在下一行中,您可以调用 save
并根据它的返回值做出决定:
if @health_profile.save
# do stuff if successfully saved health_profile
else
# otherwise
render 'new'
end
关于ruby-on-rails - rails : first_or_create not saving,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32104939/
我真的很喜欢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
我是一名优秀的程序员,十分优秀!