ROR проблема метода link_to - PullRequest
1 голос
/ 26 июля 2011

Я пытаюсь передать некоторые значения по ссылке, и я хочу, чтобы они были невидимыми.Вот варианты, которые я пробовал:

<%= 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

Iпопросили указать мои маршруты, поэтому вот они:

  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 ]

2 голосов
/ 26 июля 2011

Если у вас есть 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 голос
/ 26 июля 2011

Как уже говорили другие, похоже, у вас есть проблема в вашем файле маршрутов.Либо проверьте, определен ли resource :comments, либо опубликуйте здесь файл маршрутов, и мы поможем вам.Вполне возможно, что это не работает, потому что вы пытаетесь POST ...

Если вы хотите «невидимые» переменные (я предполагаю, что вы хотите, чтобы переменные не появлялись в URL), вы будетедолжны POST на страницу, а не просто ссылку на нее.В этом случае ваш второй пример - лучшая ставка.Это идет вразрез с соглашением POST к / new, так что это может быть причиной ошибки «без маршрутов», если вы используете resource :comments

Дайте это попробовать в вашем маршруте.1010 *

Попробуйте, она должна загрузить правильную страницу и дать вам доступ к переменным, через которые вы ей перешли через params.

Обратите внимание, что это противоречит соглашению.Есть ли причина, по которой вы не хотите, чтобы эти переменные появлялись в URL?Вероятно, есть лучший способ сделать то, что вы думаете, и если вы объясните, мы можем посоветовать вам как можно лучше.

0 голосов
/ 26 июля 2011

Метод является частью html_options, вам нужно разделить два хэша следующим образом:

<%= link_to 'Add comment', {:controller => :comments, :action => :new, :idea_id => @idea.id, :user_id => @idea.user.id}, :method => :post %>
0 голосов
/ 26 июля 2011

Вы правильно определили маршруты?Вы можете показать, как они?У вас должно быть что-то вроде этого, чтобы это работало: resource :comments

Кроме того, вообще / new работает с GET, и POST отправляется при создании ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...