Частичная загрузка Rails не отображается?

У меня есть приложение, в котором пользователи имеют представления и папки для хранения и организации их представлений. На мой взгляд, я показываю список всех папок пользователей, и в идеале, когда пользователь нажимает на папку, все материалы, связанные с папкой, загружаются в представление.

Проблема

Моя точка зрения выглядит так:

<div id="submission-list-container">
                <% current_user.folders.each do |folder| %>
                    <%= link_to folder_path(folder.id), :remote=> true, :id=>folder.id %>
                    <div class="post-container" id="<%= folder.id %>">
                        <%= folder.title %> <p id="created-time">Created <%= folder.created_at.strftime("%e/%-m") %></p>
                    </div>
                <% end %>
            </div>

Rails перебирает каждую папку, связанную с current_user, и помещает ее в представление. Как видите, у меня есть link_to, который указывает путь для действия show в модели папок. Я передаю идентификатор каждой папки.

Что должно произойти, так это то, что он перейдет к действию show в контроллере папок, которое выглядит следующим образом:

def show
    @folder = Folder.find(params[:id])
    respond_to do |f|
        f.js 
        f.json
    end
end

Гиперссылка выглядит как «/ папки / 1», что соответствует действию показа. Однако, когда я нажимаю ссылку, я вижу в своей консоли следующее:

Processing by HomeController#index as JS
Parameters: {"id"=>"1"}
User Load (2.2ms)  SELECT "users".* FROM "users" WHERE "users"."id" = 2 LIMIT 1
Folder Load (1.7ms)  SELECT "folders".* FROM "folders" WHERE "folders"."user_id" = 2

Это явно неверно. Он должен загружать папку с идентификатором folder.id, который я прошел, а не с идентификатором current_user.

У меня также есть файл с названием show.js.erb, который находится в / views / home. Этот файл предназначен для вставки партиала в класс .post-container (именно там, где я вводил его для этого теста). Файл выглядит так:

$(".post-container").append('<%=j render :partial => 'contents', :locals => {:folder => folder } %>');

Я не буду публиковать свое частичное сообщение, так как этот пост становится довольно длинным, но я его протестировал и знаю, что он работает. Наконец, для ясности я сделал rake routes и получил следующий результат (все, что касается папок):

                 folders GET    /folders(.:format)                      folders#index
                     POST   /folders(.:format)                      folders#create
          new_folder GET    /folders/new(.:format)                  folders#new
         edit_folder GET    /folders/:id/edit(.:format)             folders#edit
              folder GET    /folders/:id(.:format)                  folders#show
                     PUT    /folders/:id(.:format)                  folders#update
                     DELETE /folders/:id(.:format)                  folders#destroy

Как новичок в Rails, я пытался отлаживать эту проблему снова и снова, но безрезультатно. Поиск в Google тоже не очень помог, поэтому я и обращаюсь к вам, ребята и девчонки. Даже если вы не уверены в проблеме, мы будем очень признательны за совет о том, с чего начать.

Спасибо!


person Tom Maxwell    schedule 15.07.2013    source источник


Ответы (1)


Кажется, ваша проблема в том, что вы должны использовать:

<%= link_to 'Folder ' + folder.id, folder_path(folder), :remote=> true %>

вместо того:

<%= link_to folder_path(folder.id), :remote=> true, :id=>folder.id %>

Поскольку это не соответствует ни одной подписи из документов .

person sites    schedule 15.07.2013
comment
Спасибо! Должно быть, я получил неверную информацию от кого-то, кто пытался мне помочь. - person Tom Maxwell; 15.07.2013