我有一个这样的模型:
class Url < ApplicationRecord
validates ...
before_create :generate_number
def generate_number
self.number = a random value
end
end
和控制器中的create()
方法:
def create
@url = Url.new(url_params)
respond_to do |format|
if @url.save
format.html { redirect_to @url, notice: 'Url was successfully created.' }
format.json { render :show, status: :created, location: @url }
else
format.html { render :new }
format.json { render json: @url.errors, status: :unprocessable_entity }
end
end
end
我的数据库只有两个字段:given_url
和number
。现在,当我转到new
页面时,given_url
和number
有2个输入表单。但我希望number
从generate_number
获取值,而不是从表单中获取值。我怎么能这样做?
或者更具体一点,是否有办法让应用已经从用户输入中获取值后,generate_number
方法覆盖用户的输入?
答案 0 :(得分:1)
好吧,我找到了解决这个问题的方法。正如@ts在评论中提到的那样,我将before_create :generate_number
更改为after_create :generate_number
并将添加 self.save
更改为generate_number
方法的末尾:
def generate_number
...
self.number = some number
self.save
end
答案 1 :(得分:1)
您可以使用强参数
简单地限制用户的输入def url_params
params.require(:url).permit(:other, :params)
end