我的帐户索引页列出了所有帐户,每个帐户都有一个链接到"+服务";这应该会将用户定向到/my_services/new页面,并根据在Accounts索引页面上单击的链接,使用适当的ID预填充account_id字段。
我在每个页面的底部都有debug(params),并且在我尝试的过程中,除了:controller和:action显示在/my_services/new页面的参数中之外,我没有得到任何其他东西。
我一直在尝试的链接是这样的:
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 } ) %>
3条答案
按热度按时间au9on6nz1#
首先,link_to是一个html标记帮助器,它的第二个参数是url,后面跟着html_options。你想要的是把account_id作为url参数传递给path。如果你已经在routes.rb中正确地设置了命名路由,你可以使用path帮助器。
我认为最好的做法是将模型值作为嵌套在其中的参数传递<model_name>:
而且你需要控制account_id是否允许“批量赋值”,在rails 3中你可以使用强大的控制器来过滤有效的参数,我强烈推荐。
http://apidock.com/rails/ActiveModel/MassAssignmentSecurity/ClassMethods
还应注意,如果account_id不是由用户自由设置的(例如,用户只能为自己的单个account_id提交服务,则更好的做法是不经由请求发送它,而是通过添加如下内容在控制器内设置它:
如果您只允许用户在自己的帐户上创建服务,但允许管理员通过使用attr_accessible中的角色创建任何人的帐户,那么您当然可以将两者结合起来。
lnlaulya2#
试试这个
它将根据您的需要传递account_id。
For more details on link_to use this http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to
0md85ypi3#
如果它仍然不工作,请检查路径: