我们有这个对象,@ current_employer,这表现得有些奇怪。第一次更新失败,第二次更新。
<RelativeLayout
android:id="@+id/rlCountry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="10dp"
android:background="@android:color/white" >
<Spinner
android:id="@+id/spnCountry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:popupBackground="@android:color/transparent"
android:visibility="invisible" />
<Button
android:id="@+id/btnAllergies"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_centerInParent="true"
android:background="@android:color/transparent"
android:gravity="start|center"
android:paddingBottom="5dp"
android:paddingEnd="5dp"
android:paddingLeft="10dp"
android:paddingRight="5dp"
android:paddingStart="10dp"
android:paddingTop="5dp"
android:tag="0"
android:text="Select Country"
android:textColor="#ACACAC"
android:textSize="14sp" />
</RelativeLayout>
我们在这里初始化它:
(byebug) @current_employer.update(settings_params)
false
(byebug) @current_employer.update(settings_params)
true
它只是一个标准&#34;发现&#34;。
目前的解决方法:
@current_employer = Employer.find(decoded_auth_token[:employer_id])
之前有人见过这个吗?
更新
在&#34; before_save&#34;中跟踪它到这一行。调用
if @current_employer.update(settings_params) || @current_employer.update(settings_params)
...
似乎 # self.is_test = false if is_test.nil?
是保留关键字?
答案 0 :(得分:0)
<强>解决强>
完整回调,修复内联注释:
def set_default_values
self.has_accepted_terms = false if has_accepted_terms.nil?
self.live = true if live.nil?
self.account_name.downcase!
self.display_name ||= account_name
self.display_name ||= ""
self.contact_first_name ||= ""
self.contact_last_name ||= ""
self.phone_number ||= ""
self.is_test_account = false if is_test_account.nil?
true # FIX. The proceeding line was returning 'false', which was giving us a 'false' return value for the before_save callback, preventing the save.
end
答案 1 :(得分:0)
<强>模型强>
如果它在一个实例中失败并且几乎立即成功,那么典型的问题是您将不正确/冲突的属性传递给模型。
我推测你发送的settings_params
有一个阻止保存发生的值。您通过更新提到了这一点:
# self.is_test = false if is_test.nil?
解决这个问题的方法是从你的params散列中删除任何潜在的错误属性:
def settings_params
params.require(:employer).permit(:totally, :safe, :attributes)
end
您的模型应一致地更新 - 无论出现什么条件。如果它失败了,这意味着模型保存流程中会出现另一个问题。
-
没有看到额外的信息,我无法看到它们可能是什么
<强>更新强>
设置默认值的更好方法如下:
How can I set default values in ActiveRecord?
您可能希望使用attribute-defaults
gem:
class Foo < ActiveRecord::Base
attr_default :age, 18
attr_default :last_seen do
Time.now
end
end