首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在link_to中传递Rails参数

在link_to中传递Rails参数
EN

Stack Overflow用户
提问于 2012-05-27 19:39:06
回答 3查看 129.1K关注 0票数 77

My accounts索引页面列出了所有帐户,并且每个帐户都有一个指向"+ Service“的链接;这应该将用户定向到/my_services/新页面,并且已经使用适当的ID预先填充了account_id字段,具体取决于在帐户索引页面上单击的链接。

我在每个页面的底部都有debug(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

有没有人能帮我找个合适的方法呢?我还没能用我试过的一些令人讨厌的小东西让它继续下去。

编辑

事实证明,如果将来有人考虑这个问题,嵌套资源(可能使用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 } ) %>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-27 20:06:58

首先,link_to是一个html标签助手,它的第二个参数是url,然后是html_options。您想要的是将account_id作为url参数传递给路径。如果已在routes.rb中正确设置了命名路由,则可以使用路径帮助器。

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

我认为最好的做法是将模型值作为嵌套的参数传递:

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进行“批量分配”。在Rails3中,您可以使用强大的控件来过滤控制器中的有效参数。我强烈推荐。

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

还请注意,如果account_id不是由用户自由设置的(例如,用户只能为自己的单个account_id提交服务,那么更好的做法是不通过请求发送它,而是通过添加以下内容在控制器中设置它:

@my_service.account_id = current_user.account_id 

如果您只允许用户在自己的帐户上创建服务,但允许管理员通过在attr_accessible中使用角色来创建任何人的服务,那么您可以将两者结合起来。

希望这能有所帮助

票数 118
EN

Stack Overflow用户

发布于 2012-05-27 19:54:51

尝尝这个

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

票数 10
EN

Stack Overflow用户

发布于 2016-03-02 17:56:13

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

如果它仍然不工作,请检查路径:

$ rake routes
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10773695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档