Как работает механизм link_to в Ruby on Rails - PullRequest
2 голосов
/ 30 июля 2011

Я реализовал официальный Создание проекта блога в соответствии с указанными инструкциями. Но я не понимаю идею использования link_to в этом проекте, например:

<td><%= link_to 'Show', post %></td>
<td><%= link_to 'Edit', edit_post_path(post) %></td>
<td><%= link_to 'Destroy', post, :confirm => 'Are you sure?', :method => :delete %></td>

указано в app/views/posts/index.html.erb файле, а также соответствующий код в app/controllers/posts_controller.rb для рендеринга html-страниц в каталоге app/views/posts/.

Если я хочу отобразить новую html-страницу, скажем index2.html.erb в каталоге app/views/posts/, в которой нет ссылок 'Edit' и 'Destroy' по сравнению с index.html.erb, то как мне написать link_to и соответствующий код в posts_controller.rb?

Ответы [ 2 ]

4 голосов
/ 30 июля 2011

Если вы хотите действие с именем index2, например, для примера URL, например http://localhost:3000/posts/index2, вам необходимо:

  1. Создать действие (метод) для него вposts_controller.rb:

    class PostsController < ApplicationController
      ...
      def index2
      end
      ...
    end
    
  2. Создайте для него файл представления в каталоге app/views с именем index2.html.erb

  3. Добавить маршрутна config/routes.rb, например:

    resources :posts do
      member do
        get 'index2'
      end
    end
    

Чтобы создать ссылку на вновь созданную страницу index2, добавьте ссылку на какой-нибудь другой файл html.erb, например:

link_to "index 2",index2_post_path

Я настоятельно рекомендую книгу Agile Web Development с Rails (прагматичными программистами)

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

Не уверен, что именно вы подразумеваете под написанием link_to и соответствующего кода в post_controller.rb

Механизм link_to можно упростить следующим образом:

link_to('whatever you want to display in the link',{:controller => 'corresponding controller name',:action => 'corresponding action name'})

Что касается рендеринга другого шаблона, просто перейдите к контроллеру и напишите это:

рендеринга ( 'controllername / вид')

Надеюсь, это поможет

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