Rails Form Helpers Проблема с link_to - PullRequest
0 голосов
/ 02 февраля 2011

У меня есть следующие две строки кода в одном из моих представлений (действие индекса в ProjectController). Код ниже находится внутри цикла, который перебирает переменную экземпляра @projects как project.

    <td><%= link_to(project.name, :action => 'show', :id => project.id) %></td>
    <td><%= link_to("Edit", :action => 'edit', :id => project.id ) %></td>

Первый помощник дает мне эту ссылку: http://localhost:3000/project/show/1 и т. Д., А второй помощник выводит: http://localhost:3000/project/edit?id=1 и т. Д. Я бы хотел, чтобы обе ссылки следовали одинаковым соглашениям.То есть.тот, который предпочитает Rails (первый)

Вот мои методы контроллера:

class ProjectController < ApplicationController
  def index
    @projects = Project.find(:all)
  end

  def new
    @project = project.new
  end

  def edit
    @project = Project.find(params[:id])
  end

  def show
    @project = Project.find(params[:id])
  end

end

Некоторые действия не показаны для краткости ..

ОБНОВЛЕНИЕ: Я получаю ту же ссылку с?если я использую:

 <td><%= link_to(project.type, :action => 'edit', :id => project.id ) %></td>

, где type - это один из других столбцов в таблице проектов в моей базе данных.

Ответы [ 3 ]

3 голосов
/ 02 февраля 2011

Убедитесь, что вы объявили свой ресурс в routes.rb:

map.resources :posts

Затем в консоли запустите rake routes, чтобы вы могли увидеть весь свой маршрут.

Вот ссылки, которые вам нужны для этого ресурса. Сначала я добавлю правку, потому что это то, что вам нужно, и не забудьте окружить все эти ссылки встроенными тегами ruby ​​<%= %>

@post.each do |post|  
  link_to "Edit", edit_post_path(post)
  link_to "Destroy", post, :method => :delete, :confirm => "Are you sure?"
  link_to "Show", post
  link_to "New Post", new_post_path
end

Это должны быть все ссылки, необходимые для этого ресурса

Обновление

Если вы не используете REST, как следует, потому что это облегчает работу в долгосрочной перспективе, и rails - это чудесно REST API, вы можете просто создать именованный маршрут для редактирования. В противном случае вы можете добавить это для форматирования ваших маршрутов, но эти типы маршрутов небезопасны:

map.connect ':controller/:id/:action' 

добавьте это к routes.rb, и оно даст вам приложение без RESTful Rails с REST-подобными представлениями:)

0 голосов
/ 02 февраля 2011
MyApplication::Application.routes.draw do
  get "project/index"

  get "project/new"

  get "project/create"

  get "project/update"

  get "project/delete"

  get "project/destroy"

  get "project/edit" <---- Notice this line

  match ':controller(/:action(/:id(.:format)))'
end

Проблема была каким-то образом создана файлом Routes.rb. У меня была строка маршрутов для всех маршрутов в нижней части моего файла rout.rb - сейчас это не рекомендуется в Rails 3.0, а в Rails 3.0 теперь поддерживается маршрутизация ресурсов.

Когда я сгенерировал свой Project Controller, он добавил эти строки get в файл маршрутов. эти строки получения соответствуют действиям, которые я определил, когда генерировал контроллер через консоль. Принимая во внимание, что действие show было сгенерировано вручную и, следовательно, вернулось к последней строке.

0 голосов
/ 02 февраля 2011

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

Я думаю, что вы можете использовать любой из этих примеров, предполагая, что вы используете ресурсы: проекты в ваших маршрутах. Rb:

<td><%= link_to(project.name, { :action => 'show', :id => project.id } ) %></td>
<td><%= link_to("Edit", { :action => 'edit', :id => project.id } ) %></td> 

или:

<td><%= link_to(project.name, project_path(project.id) ) %></td>
<td><%= link_to("Edit", edit_project_path(project.id) ) %></td>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...