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]。是否为空?
此主题可能很有趣:我尝试过,但出现了一个错误。“空?没有定义”这正是我要找的。谢谢!