2009-11-23 4 views
1

Я новичок в рельсах, поэтому извините любые легкие вопросы. Я разработал блог, и я делаю некоторые настройки. Просто любопытно, если я хочу отобразить конкретное сообщение на моей странице index.html.erb, это возможно. Например, если я создаю сообщение, заголовок: Cool Post, и у него есть post_id из 25 в таблице, на моей индексной странице я могу вызвать эту конкретную запись для рендеринга?Как создать ссылку на определенный объект Post в представлении Rails?

ответ

0

Его трудно точно сказать, как система настроена, но «правильный» способ сделать это в Rails, чтобы сделать что-то подобное в Controller на странице:

def index 
    @post = Post.find(25) 

    ... Your other code here ... 
end 

И в вашей index.html.erb вы можете выводить сообщение:

<h2><%= h(@post.title) %></h2> 
<%= h(@post.body) %> 

конечно, я полностью гадание на полях по своему @post

Edit: Если все, что вы хотите сделать, это оказать @post вы все равно хотите получить почту, чтобы вынести в контроллере, но тогда вы будете хотеть использовать частичный и вынести его из index.html.erb файла:

  1. Гипотетически создайте файл _post.html.erb в своем каталоге app/views/posts/ и поместите туда любой код рендеринга (или отрисуйте его из существующего файла app/views/posts/index.html.erb. _Примечание: обратитесь к сообщению в частичном, используя локальную переменную post, а не @post для максимальной гибкости.

  2. Затем вызовите ее в index.html.erb для так:

    'сообщений/пост',: объект => @post%>

Этот вызов предполагает файл index.html.erb не в том же каталоге как _post.html.erb частичный.

+0

Примечания знает, почему у вас есть; после вашего 'Post.find (25)' и более чистого способа вывода 'h' является' <% = h @ post.something%> '. В противном случае это хорошо. – Garrett

+0

@Garret, точка с запятой была потому, что я слишком много кодировал в JavsScript и PHP :) С помощью функции h я думал, что для всех вызовов функций потребуется скобка в Ruby 1.9. Я ошибаюсь? –

0

Я думаю, что его вопрос касается рендеринга/перенаправления. Вы должны сделать (в качестве последней строки в контроллере)

render @post 

или

redirect_to @post 

первым, чтобы показать пост, второй, чтобы показать запись после создания/обновления.

+0

Спасибо, я не понял этого вопроса ... но я снова посмотрел, и ты прав. Я обновил свой вопрос, включив в него немного больше деталей. Надеюсь, это поможет ему! –

0

В то время как решение dcneiner технически корректно, путь Rails не должен жестко кодировать эти вещи. После того, как блог будет работать, вам придется изменить источник напрямую, чтобы изменить этот пост. Это не рекомендуется.

Я собираюсь предложить добавить дополнительный столбец в таблицу Posts, чтобы обозначить, должна ли Post постоянно отображаться на первой странице. Это позволяет вам динамически обновлять ваши постоянные сообщения только с помощью галочки при ее создании.

Например:

class Post < ActiveRecord 
    named_scope :featured, :conditions => {:featured => true}, 
    :order => "created_at DESC" 
end 

Post.featured будет вернуть признаки поста для использования на главной странице, приказал новым к старому.

Если вы хотите только один признаки поста в то время, вы можете добавить следующие модели Post

before_validation :highlander_clause 

    def highlander_clause 
    Post.featured.each{|p| p.update_attribute(:featured, false) if featured 
    end 
Смежные вопросы