将模型中生成的错误传播给用户的正确方法是什么?
例如,我有一个Reminder
模型与时间相关联。我还有一个静态方法create_new
如下:
def self.create_new date_string, time_string
Reminder.new DateTime.parse(#{date_string} #{time_string})
end
在控制器中,我正在调用此方法来创建新提醒。表单视图和控制器很简单。
当用户在其时间字段中输入拼写错误(即:112:45而不是11:45)时,parse
将引发错误。
在表单中通知用户输入拼写错误位置的最佳方法是什么?我想避免在客户端使用javascript。
谢谢!
答案 0 :(得分:4)
我建议在Reminder模型中使用验证来处理它。您可以按照here的说明编写自己的自定义验证程序,也可以使用validates_timeliness之类的现有宝石。
这允许您遵循Rails的约定优于配置方法,并避免在模型上编写自定义创建方法或使用救援块乱丢控制器代码。
您的控制器操作将变为
def create
@reminder = Reminder.new(reminder_params)
if @reminder.save
# redirect or whatever
else
flash.now[:error] = @reminder.errors.full_messages
end
end
然后可以在update
动作中执行相同的操作。希望这会有所帮助。
答案 1 :(得分:1)
在您的控制器中:
def action
r = create_new params
-- do stuff
rescue StandardError => e
flash.now[:error] = e.message
end
在您的视图中,您可以只渲染flash.now [:error]的输出以显示错误(如果有)。 我还将flash变量用于所有验证消息,以及更新模型时或创建失败时的情况。
来源:http://guides.rubyonrails.org/action_controller_overview.html#the-flash