RoR:在不同的控制器中使用用户模型中定义的方法

时间:2018-01-05 01:52:07

标签: ruby-on-rails ruby

我是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 %>

希望您理解我的问题,并能够提供帮助。非常感谢。

2 个答案:

答案 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)