在rails控制器方法中使用重定向传递参数

时间:2013-09-08 13:53:58

标签: ruby-on-rails ruby-on-rails-3

我有这种控制器方法:

def slide_change
 j=params[:val]
 g=TargetPortfolio.new
 @h,@lock=g.finding_the_concerned_id(j)
 #@h , @lock both are array. 
 last=TargetPortfolio.last  # TargetPortfolio is model class
 last.update_attributes(folders: @h)
 redirect_to :action => "target_port" #with this i need to pass @lock as argument
end

控制器的另一种方法target_port:

def target_port
 @h=TargetPortfolio.last.folders
 # @lock from the slide_change
end 

可用路线

slide_change GET  /slide_change(.:format)                Portfolio#slide_change
 /:controller(/:action(/:id))(.:format) :controller#:action

我有使用@h和@lock的target_port.erb。任何猜测我是如何做到的。

3 个答案:

答案 0 :(得分:2)

您必须在g操作的routes.rb文件中定义target_port给出的值。所以我们说g是一个身份证号码。

在routes.rb中:

match '/TARGET/:id', :to => 'controller#target_port', :as => :target_port

所以在你的控制器中你可以写:

def slide_change
 j=params[:val]
 g=some_function(j)
 redirect_to target_port_path(g)
end

更新

(更详细)

new视图文件中,添加此行

<%= hidden_field_tag "lock", @lock %>

隐藏字段标记创建一个名为“lock”的参数,在提交表单时会传递该参数,您可以通过将控制器的create操作设置为

来访问该参数。
def create
  ...
  @lock = params[:lock]
  ...
end

答案 1 :(得分:1)

将重定向更改为 redirect_to :action => "target_port", :lock => @lock并使用target_port

将其加载到@lock = params[:lock]方法中

答案 2 :(得分:0)

当我在我的控制器中执行此操作时,它看起来像

redirect_to some_path(:params1 => params1_value, :params2 => params2_value)