Rails的自定义操作后,REST风格的控制器和渲染
-
19-08-2019 - |
题
如何在宁静的控制器中执行的动作,而不是重定向之后呈现。
我有一个标准操作的控制器,以及我添加了一个特殊的行动,将数据添加到相关资源,通过#show页面上的表单(想想上发表评论)。我从表单验证输入,并希望重新呈现在错误显示行动,并重定向到成功的表演动作。
我要呈现从输入自己的信息两次保存用户,但是当我尝试呈现在闪存错误show动作[:声明]我得到一个错误,说我没有指定的ID。当我指定一个ID,它试图渲染还不存在一个新的模板。
我认为它应该是一个简单:
def add_comment
if my_validation?
save the object
redirect_to :action => "show", :id => params[:id]
else
render :action => "show", :id => params[:id]
end
end
这是不是我的实际代码,只是我放在一起刚才作为例子。
解决方案
,最好的办法是重新呈现:新
def create
@obj = TheObject.new(params[:object])
render :action => :new unless @obj.save
end
和在new.html.erb
<% form_for :obj,
:url => object_url(@obj), :html => {:method => :post} do |f| %>
<%= f.text_field :name %>
<% end %>
这样一来,在表单中输入将被预先填充与所述用户输入的内容。
其他提示
创建一个新的数据对象,从表单中添加值,你重新呈现之前,认为这会工作,然后。如果仍然出现问题,可以尝试设置一个布尔用于对现有行编辑新的,或者完全创建两个不同的看法。
我以前做过,但我不太记得如何。有时,当我用了很典型的使用MVC模式,它的allmost“自动魔法”,othertimes(我不得不使用旧的离奇数据库),我不得不编写所有魔法自己;有时ActiveRecord的对象上的全光照.new?
函数(或什么它被称为),othertimes我使用的临时“魔术值”为ID(对于无效的ID值通常字母字符串。
(I appologize如果我犯了一些错误,这是因为我编码Rails代码一段时间...)
不隶属于 StackOverflow