如何在宁静的控制器中执行的动作,而不是重定向之后呈现。

我有一个标准操作的控制器,以及我添加了一个特殊的行动,将数据添加到相关资源,通过#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代码一段时间...)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top