ROR link_to方法问题

时间:2011-07-26 12:25:49

标签: ruby-on-rails

我正在尝试通过链接传递一些值,我希望它们不可见。这些是我尝试过的选项:

<%= link_to 'Add comment', :controller => :comments, :action => :new, :idea_id => @idea.id, :user_id => @idea.user.id, :method => :post %>

<%= link_to 'Add comment',{ :controller => :comments, :action => :new, :idea_id => @idea.id, :user_id => @idea.user.id}, :method => :post %>

<%= link_to 'Add comment', :controller => :comments, :action => :new, :idea_id => @idea.id, :user_id => @idea.user.id, %>

<%= link_to 'Add comment', new_comment_path, :idea_id => @idea.id, :user_id => @idea.user.id, :method => :post %>

第一个选项 - 将方法视为参数: http://localhost:2000/comments/new?idea_id=1&method=post&user_id=1

第二个选项 - 如下所示:http://localhost:2000/comments/new?idea_id=1&user_id=1 并导致路由错误:“路由错误没有路由匹配”/ comments / new“

第三个选项 - 加载表单,但当然就像:http://localhost:2000/comments/new?idea_id=1&user_id=1

第四个选项 - 看起来不错(http:// localhost:2000 / comments / new),但路由错误与第二个相同。

我做错了什么?

提前致谢。

PS

我被要求提供我的路线,所以他们在这里:

  resources :rights

  resources :comments

  resources :ideas

  resources :users

  resources :sessions, :only => [:new, :create, :destroy]

  root :to => 'main#home'

  #match '/comments/new' => "comments#new" # this doesn't help

  match '/home', :to => 'main#home'
  match '/contact', :to => 'main#contact'
  match '/signin', :to => 'sessions#new'
  match '/signout', :to => 'sessions#destroy'
  match '/signup', :to => 'users#new'

4 个答案:

答案 0 :(得分:2)

如果你有RESTful路线

<%= link_to 'Add comment', new_comment_path, 
            :idea_id => @idea.id, :user_id => @idea.user.id, :method => :post %>

应该是

<%= link_to 'Add comment', comments_path, 
            :idea_id => @idea.id, :user_id => @idea.user.id, :method => :post %>

答案 1 :(得分:1)

正如其他人所说,听起来你的路线文件有问题。检查您是否已定义resource :comments或在此处发布您的路线文件,我们会帮助您。它可能因为你试图发布而无法正常工作......

如果你想要'隐形'变量(我猜你的意思是你不希望变量出现在URL中),你必须 POST 到页面而不是仅仅链接到它。在这种情况下,你的第二个例子是最好的选择。如果您正在使用resource :comments

,则可能是导致“无路由”错误的原因,这违反了惯例。

试试你的routes.rb:

match '/comments/new' => "comments#new"

尝试一下,它应该加载正确的页面,并允许您访问通过params传递给它的变量。

请注意,这违反惯例。您是否有理由不希望这些变量出现在URL中?这可能有更好的方式来做你正在思考的事情,如果你解释我们可以尽我们所能为你提供建议。

答案 2 :(得分:0)

您是否正确定义了路线? 你能说明他们是怎么回事吗? 你应该有这样的东西:resource :comments

此外,一般情况下/新作品使用GET,并在创建时发送POST ...

答案 3 :(得分:0)

该方法是html_options的一部分,你需要将两个哈希分开,如下所示:

<%= link_to 'Add comment', {:controller => :comments, :action => :new, :idea_id => @idea.id, :user_id => @idea.user.id}, :method => :post %>