【问题标题】:Rails RESTful controller and rendering after custom actionRails RESTful 控制器和自定义操作后的渲染
【发布时间】:2010-09-25 09:20:20
【问题描述】:

如何在 restful 控制器中执行操作而不是重定向后进行渲染。

我有一个带有标准操作的控制器,我添加了一个特殊操作,通过#show 页面上的一个表单将数据添加到相关资源中(在帖子中思考 cmets)。我正在验证来自表单的输入,并希望在错误时重新呈现显示操作并在成功时重定向到显示操作。

我想渲染以使用户免于输入他们的信息两次,但是当我尝试在 flash[:notice] 中渲染显示操作时出现错误时,我收到一条错误消息,指出我没有指定 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

这不是我的实际代码,只是我刚才拼凑的一个例子。

【问题讨论】:

    标签: ruby-on-rails rest redirect action render


    【解决方案1】:

    最好的方法是重新渲染 :new

    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 %>
    

    这样,表单中的输入将预先填写用户输入的内容。

    【讨论】:

      【解决方案2】:

      创建一个新的数据对象并添加表单中的值,在重新渲染之前,认为它会起作用。如果您仍然遇到问题,请尝试设置一个布尔值来编辑新行和现有行,或者完全创建两个不同的视图。

      我以前做过,但我不太记得是怎么做的。有时当我使用 MVC 模式的典型用法时,它几乎是“自动的”,有时(因为我不得不使用一个古老的古怪数据库)我必须自己编写所有的魔法;有时在 ActiveRecord 对象上使用.new? 函数(或它被调用的函数),有时我对 ID 使用临时“魔法值”(通常是字母字符串作为无效的 id 值。

      (如果我犯了一些错误,我深表歉意,我已经有一段时间没有编写 Rails 代码了......)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-12
        • 2011-07-14
        • 2012-07-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多