Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails设计标题化注册期间不存在的用户字段_Ruby On Rails_Model_Devise_Title - Fatal编程技术网

Ruby on rails Rails设计标题化注册期间不存在的用户字段

Ruby on rails Rails设计标题化注册期间不存在的用户字段,ruby-on-rails,model,devise,title,Ruby On Rails,Model,Devise,Title,在我的用户模型中,我在创建或保存用户之前调用titleize方法,如下所示: before_save :titleize, :to_lower before_create :titleize, :to_lower def titleize self.first_name = self.first_name.titleize self.last_name = self.last_name.titleize self.pursuits = self.pursuits.ti

在我的用户模型中,我在创建或保存用户之前调用titleize方法,如下所示:

before_save :titleize, :to_lower
before_create :titleize, :to_lower 

def titleize
    self.first_name = self.first_name.titleize
    self.last_name = self.last_name.titleize
    self.pursuits = self.pursuits.titleize
end

这很好,但我有更多的用户字段,我想标题化,不能访问,直到用户实际注册,如生物或城市。但是如果我把这些放进我的titleize方法中,我会得到注册错误,因为这些字段实际上没有出现在注册表单上。那么,如何在不中断注册的情况下对这些其他字段进行标题化?

您可以添加如下条件:-

before_save :titleize, :to_lower
before_create :titleize, :to_lower 

def titleize
  self.first_name = self.first_name.titleize
  self.last_name = self.last_name.titleize
  self.pursuits = self.pursuits.titleize
  if self.bio?
    self.bio = self.bio.titleize
  end
end
以下是我的看法:

  def titleize
    fields_to_titleize.each { |f| self[f] = self[f].titleize }
  end

  def fields_to_titleize
    fields = [:first_name, :last_name, :pursuits, :bio, :city]
    fields.keep_if { |f| self.respond_to?(f) }
  end

您收到了哪些错误?提交了答案。如果这不是你想要的,你能澄清一下“在用户真正注册之前不能访问”吗。这是否意味着模型无法访问该属性,或者该属性返回nil或其他条件?我想问您为什么要在这里修改用户输入。标题化有什么意义?只是为了让名字在某处显示时看起来更好吗?如果是这样,为什么不在视图中调用titleize,或者创建一个模型方法,比如
def display\u name;self.first_name.titleize+“”+self.last_name.titleize;结束
?我得到的是未定义的方法“titleize”,但我只是将它们包装在if语句中,现在可以使用了。