最初调用新函数时,所有变量均正确加载。 params [:code]是在路由中定义的URL参数。 但是,当在create上验证失败并呈现new时,不会加载@m变量(当在“ new”模板中调用@m属性时,这会引起nomethoderror)。 因此,:code参数在渲染新的之后不会获得。 但是,验证失败后,是否可以保留:code参数?

     class AffiliatesController < ApplicationController

        def new
          @m = Merchant.find_by_code(params[:code])
          @affiliate = Affiliate.new
        end


        def create
          a = Affiliate.new(params[:affiliate])
          if a.save
             redirect_to 'http://' + params[:ref]
          else
             render 'new'
          end
       end
    end

===============>>#1 票数:1 已采纳

除了使用会话之外,保存params[:code]另一种方法是在表单中添加一个隐藏字段。

<%= form_for @affiliate do |f| %>
  <%= hidden_field_tag :code, @m.code %>

然后将创建动作更改为

def create
  @affiliate = Affiliate.new(params[:affiliate])

  if @affiliate.save
    redirect_to 'http://' + params[:ref]
  else
    @m = Merchant.find_by_code(params[:code])
    render :new
  end
end

===============>>#2 票数:0

在调用render之前,您应该填写视图将使用的所有变量。 因此,在您的情况下,您还需要实例化@m = ... 然后再从create内部render 'new'

如果您需要一个额外的参数来完成此操作(在您的情况下为param[:code] ),我不建议您配置路由并通过URI传递此信息,这很复杂。

而是使用会话,这要容易得多!

例如:在index (或在任何可用的商家代码处)添加session[:merchant_code] = the_code

new更改中@m = Merchant.find_by_code(session[:merchant_code])

干杯,

  ask by Jackson Henley translate from so

未解决问题?本站智能推荐: