如何在rails中的render动作中传递参数

reg*_*rem 7 ruby ruby-on-rails render ruby-on-rails-3 ruby-on-rails-3.2

def create
    @emppede = Emppede.new(params[:emppede])

    respond_to do |format|
      if @emppede.save
        format.html { redirect_to :action => :index, :id => @emppede.ad }
        format.json { render json: @emppede, status: :created, location: @emppede }
      else

        format.html { render action: "new", :id => @emppede.ad } *(....error)*
        format.json { render json: @emppede.errors, status: :unprocessable_entity }
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

我必须在新方法中传递id.这里如果数据保存得当,则转到索引方法.但如果不是那么它应该是新的,但与params id.我怎么能通过渲染动作传递参数?这里我想做,但param id没有传递给新方法.我突然强调了这一点.如果我做

 format.html { redirect_to :action => :new, :id => @emppede.ad }
Run Code Online (Sandbox Code Playgroud)

然后它不会给出错误消息...

我必须将用户ID传递给新方法,以便我可以通过表单传递并保存.

<div id="employm" style="display:none">


    <%= f.text_field :ad, :value=> @id%>

            </div>
Run Code Online (Sandbox Code Playgroud)

但是当表单获取错误时它会呈现给新的但在这里我必须发送其中的id @emppede.ad.我怎样才能做到这一点?因为为了输入新方法,应该传递id

redirect_to :action => :new, :id => @id
Run Code Online (Sandbox Code Playgroud)

Tig*_*ine 7

您在控制器操作中定义的所有实例变量都存在于视图中.因此,如果您@id = 11在控制器中定义,则可以使用在视图中访问它<%= @id %>.

如果要通过重定向执行此操作,您只需访问parameters视图内部(或首先在控制器中使用它们,然后使用上面的实例方法).

您发布的代码有点神秘,但渲染不会进入new方法,只会new.html.erb在当前上下文中呈现.因此,如果您在创建操作中声明@id并渲染新的,则会让它存在.

重定向到:action时,您必须将@id作为参数传递.


小智 7

渲染将查找"new.html",它不会进入新方法.