Rails – 在link_to中传递参数

我的帐户索引页面列出所有帐户,并且每个帐户都有一个链接到“+服务”; 这应该引导用户到/ my_services /新页面,并预先填充account_id字段与适当的ID,这取决于哪个链接被点击的帐户索引页面上。

我在每个页面的底部都有debugging(params),而且我正在尝试的是,除了:/ my_services / new页面的参数中显示的controller::action之外,我没有得到任何东西。

我一直在尝试的链接是这样的:

link_to "+ Service", "my_services/new", :account_id => acct.id 

然后我在服务控制器中也有逻辑:

 def new @my_service = MyService.new if params[:account_id] @my_service.account_id = params[:account_id] end end 

有人可以帮助正确的方式做到这一点? 我还没有能够用我尝试过的一些讨厌的小黑客事情得到它。

编辑

事实certificate,如果有人在将来看到这个答案,嵌套的资源(可能与在routes.rb中的shallow: true选项)似乎是要走的路。 这部分我的routes.rb现在看起来像这样:

 resources :accounts, shallow: true do resources :services end 

我的链接现在看起来像这样:

 <%= link_to "+ Service", new_service_path(:service => { :account_id => @account.id } ) %> 

首先,link_to是一个html标签助手,第二个参数是url,后面是html_options。 你想要的是将account_id作为URLparameter passing给path。 如果您在routes.rb中正确设置了命名路由,则可以使用path助手。

 link_to "+ Service", new_my_service_path(:account_id => acct.id) 

我认为最好的做法是将模型值作为一个嵌套的parameter passing给:

 link_to "+ Service", new_my_service_path(:my_service => { :account_id => acct.id }) # my_services_controller.rb def new @my_service = MyService.new(params[:my_service]) end 

而且你需要控制account_id被允许进行“批量分配”。 在轨道3中,您可以使用强大的控件来过滤它所属的控制器内的有效参数。 我强烈推荐。

http://apidock.com/rails/ActiveModel/MassAssignmentSecurity/ClassMethods

还要注意的是,如果account_id不是由用户自由设置的(例如,用户只能为自己的单一account_id提交服务,那么最好不要通过请求发送它,而是通过添加一些东西喜欢:

 @my_service.account_id = current_user.account_id 

如果您只允许用户自己创build服务,但是允许pipe理员使用attr_accessible中的angular色来创build任何人,那么您一定可以将两者结合起来。

希望这可以帮助

尝试这个

 link_to "+ Service", my_services_new_path(:account_id => acct.id) 

它会传递你想要的account_id。

有关link_to的更多详情,请使用http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

 link_to "+ Service", controller_action_path(:account_id => acct.id) 

如果它仍然不工作检查path:

 $ rake routes