Странная маршрутизация в рельсах рендерит частичные - PullRequest
0 голосов
/ 18 июля 2010

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

Я следовал учебному пособию по созданию сервиса, подобного твиттеру, и у меня есть основы, работающие из учебного пособия, но с Mongo вместо mySql.

У меня есть 3 типастраницы.Домашняя страница, на которой отображаются все сообщения, упорядоченные по дате

Страница пользователя, на которой отображаются сообщения определенного пользователя

Страница сообщений, на которой отображаются сообщения друзей пользователя.

Итак, для каждой страницы я сделал следующее

1) создал метод в соответствующем контроллере для получения правильных сообщений

2) создал _posts.html.erbстраница с параметрами отображения, которые немного отличаются на каждой странице

3) ссылается на частичное на странице index.html.erb для каждого представления.

*1018* Записи контроллера выглядят следующим образом
  def index
   @posts = Post.all(:order => 'created_at DESC')
  end

или

def posts
  @posts = Post.all(:conditions => {'user_id' => params[:id]}, :order => 'created_at DESC')
    end

и частями являются

<%= render :partial => @posts %>

В каждом представлении есть файл _posts.html.erb, и каждый немного отличается

home / _posts.html.erb выглядит следующим образом

<%= div_for post do %>
    Posted <%= time_ago_in_words(post.created_at) %> ago
    Posted By <%= post.user_id %>
    <%= post.text %>
<% end %>

в то время как posts / _post.html.erb выглядит следующим образом

<%= div_for post do %>
    Posted By <%= post.user_id %>
    <%= post.text %>
<% if post.created_at > 52.hours.since %>
    <%= distance_of_time_in_words_to_now(post.created_at) %>
        <% else %>
        <%= post.created_at.strftime("%c") %>
        <% end %>
<% end %>


Теперь странная часть такова, что на всехстраницы index.html.erb, users / show.html.erb, posts / index.html.erb, частичноеОтображается это posts / _post.html.erb.Остальные полностью игнорируются.

Насколько я понимаю, рендер: частичный будет брать @posts и рендерить _posts.html.erb из текущего представления.Но этого не происходит, так как из всех представлений выводится только posts / _post.html.erb.

Я посмотрел в файле rout.rb, но там нет ничего, чтоможет вызвать эту проблему.

Кто-нибудь может сказать мне, почему я не отображаю правильные партиалы?

----------- Отредактировано --------------------------------

Структура каталогов для представлений выглядит следующим образом

views 
      - home
            -_post.html.erb
            -index.htlm.erb
      - layouts
      - posts
            -_post.html.erb
            -index.html.erb
            -posts.html.erb
      - sessions 
      - users
            -_post.html.erb
            -new.html.erb
            -show.html.erb

Я надеюсь, чтопомогает.

Ответы [ 2 ]

1 голос
/ 18 июля 2010
"post",: collection => @ posts%>

возможно, rails автоматически определяет путь к частичному, когда вы передаете только collection

0 голосов
/ 09 июля 2018

Вы передаете коллекцию как аргумент, что rails ожидает название части.Ваш вызов для рендеринга должен выглядеть следующим образом:

<%= render partial: "post", collection: @posts %>

Это отобразит app/views/posts/_post.html.erb, передав локальную переменную post частичному.

Дополнительно, (иногда удобно) есть объект итерации, доступный для этого представления, partial_name_iteration, который содержит информацию об общем размере коллекции @posts и индексе текущего объекта.

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