我是RoR的新人,希望你的专家可以帮助我。如果我的问题听起来很奇怪或愚蠢,请提前道歉。如果你需要更多的澄清,请告诉我,非常感谢。
我在用户模型中有一个名为is_pollie的布尔方法(默认设置为false),一旦用户在名为profiles_controller.rb的不同控制器中完成表单,我想将其更改为true。
现在,我有一个定义方法的用户模型:
class User < ApplicationRecord
has_many :profiles
def self.is_pollie?
is_pollie
end
在一个名为profiles_controller.rb的不同控制器中:
class ProfilesController < ApplicationController
before_action :authenticate_user!, except: [:show]
def create
@pollie = User.is_pollie?
@profile = current_user.profiles.build(profile_params)
if @profile.save
# what should I put here if I want the is_pollie? to change to true upon
a user click the save button on the form?
redirect_to basic_profile_path(@profile)
else
flash[:alert] = "Oh no, something went wrong."
render :new
end
end
在表格所在的页面中:
<%= form_for @profile do |f| %>
<div class="form-group">
<label>Displayed name:</label>
<%= f.text_field :display_name,class: "form-control"%>
</div>
<%= f.submit "Save", class: "btn-submit" %>
<% end %>
希望您理解我的问题,并能够提供帮助。非常感谢。
答案 0 :(得分:1)
您可以尝试:
current_user.update(is_pollie: true)
顺便说一句,其他几点......
此:
class User < ApplicationRecord
has_many :profiles
def self.is_pollie?
is_pollie
end
end
没有任何意义,因为self
使is_pollie?
成为一种类方法。但是,is_pollie
是一个实例值。
此外,您甚至不需要is_pollie?
,因为您可以使用current_user.is_pollie
来返回true
的{{1}}。
最后,您未在任何地方使用false
,为什么要这样做?
答案 1 :(得分:1)
使用current_user.update_column(:is_pollie, true)
更新方法将触发call_backs,建议使用update_column更新所选属性。
对于倍数,您可以使用update_columns(attributes1: value, attributes2: value)