Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.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 如果参数[:对象].nil?:对象=值_Ruby On Rails_Ruby_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 如果参数[:对象].nil?:对象=值

Ruby on rails 如果参数[:对象].nil?:对象=值,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我试图使,如果有人使一个职位没有标题的职位将得到一个默认的标题 到目前为止我已经试过了 控制器 def create @post = Post.create(post_params) if @post.title.nil? @post.update(:title => 'Unnamed') else # DO NOTHING end end def create if params[:title].nil? params[:title] == 'U

我试图使,如果有人使一个职位没有标题的职位将得到一个默认的标题

到目前为止我已经试过了

控制器

def create
@post = Post.create(post_params)
  if @post.title.nil?
    @post.update(:title => 'Unnamed')
  else
    # DO NOTHING
  end
end
def create
  if params[:title].nil?
    params[:title] == 'Unnamed'
    @post = Post.create(post_params)
  else
    @post = Post.create(post_params)
  end
end
控制器

def create
@post = Post.create(post_params)
  if @post.title.nil?
    @post.update(:title => 'Unnamed')
  else
    # DO NOTHING
  end
end
def create
  if params[:title].nil?
    params[:title] == 'Unnamed'
    @post = Post.create(post_params)
  else
    @post = Post.create(post_params)
  end
end
但它不起作用。你知道我做错了什么吗?
提前感谢。

我认为模特有责任保持自己的状态。此外,如果多个控制器改变或更新同一模型,根据原则,这是最好的解决方案。因此,在
Post
模型中,我会这样做:

before_validation :set_default_title

private
def set_default_title
  self.title = title.presence || 'Unnamed'
end

似乎您正在处理强参数,因此在
permit
所有属性之后将默认标题设置为
params
,不起作用

def post_params
  params[:post][:title] = "Unnamed" if params[:post][:title].blank?
  #params.require(:post).permit(:title, ...)
end

Post.create(post_params)
我还建议使用
blank?
。以下是
blank?
empty?
nil?
之间的区别

nil.nil? => true
"".nil? => false
"   ".nil? => false

nil.empty? => true
"".empty? => true
"   ".empty? => false

nil.blank? => true
"".blank? => true
"   ".blank? => true

我知道您不希望在输入字段中显示标题的默认值。 也许这个解决方案可以奏效

  def create
    @post = Post.new(post_params)
    @post.title = @post.title.presence || 'Unnamed' 

    if @post.save
      redirect_to # ...
    else
      render :new
    end
  end

或者模型中的“前验证”过滤器可以执行此操作。

空输入值可能不是
nil
。相反,它可能是一个空字符串。使用
params[:title]。是否为空?
此主题可能很有趣:我尝试过,但出现了一个错误。“空?没有定义”这正是我要找的。谢谢!