我正在尝试通过链接传递一些值,我希望它们不可见。这些是我尝试过的选项:
<%= 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'
答案 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 %>