Rails 3 AJAX проблема - UJS - PullRequest
       29

Rails 3 AJAX проблема - UJS

0 голосов
/ 13 июня 2011

Хорошо, вот мои настройки, я думаю, что все настроено правильно, но по какой-то причине страница не отображает ответ AJAX.

По сути, у меня есть список участников, и я хочу отобразить их «профиль» с помощью ajax на той же странице.

В views / member / index.html.erb

<table>
 <tr>
  <th>Name</th>
 </tr>

<% @members.each do |member| %>
  <tr>
    <td><%= member.name %> &amp; <%= member.sname %></td>
    <td><%= link_to 'Show', member, :remote => true %></td>
    <td><%= link_to 'Edit', edit_member_path(member) %></td>
    <td><%= link_to 'Destroy', member, :confirm => 'Are you sure?', :method => :delete %>    </td>
  </tr>
<% end %>
</table>

<%= link_to 'New Member', new_member_path %>

<div id="memberprofile">

</div>

В контроллере членов у меня есть это:

def show
  @member = Member.find(params[:id])

  respond_to do |format|
    format.html # show.html.erb
    format.js
    format.xml  { render :xml => @member }
 end
end

Затем в моем _show.js.rjsУ меня есть это

page.replace_html('memberprofile', render(@member))

Тогда в моем частичном _member.html.erb у меня есть это:

<h1><%= @member.name %></h1>

Несколько вопросов:

1) Из консоли этоговорит "Rendered members / show.html.erb", но я подумал, что это просто сделает член частичным.почему это так?

2) На странице index.html.erb ничего не происходит, когда выходит вызов ajax.Я думал, что наличие ловушки div плюс файл javascript поможет ...

Спасибо, ребята

1 Ответ

0 голосов
/ 13 июня 2011

Вы должны создать новый партиал, который отображает только профиль участника. Допустим, частичное имя _member.html.erb в вашем индексном файле выполните:

<%= javascript_include_tag "jquery-1.4.4.min.js", "jquery.form" %>
<script type="text/javascript"> var $j = jQuery.noConflict();</script>

<table>
 <tr>
  <th>Name</th>
 </tr>

<% @members.each do |member| %>
  <tr>
    <td><%= member.name %> &amp; <%= member.sname %></td>
    <td><%= link_to 'Show', "javascript:", :onclick => "show_member(member.id)" %></td>
    <td><%= link_to 'Edit', edit_member_path(member) %></td>
    <td><%= link_to 'Destroy', member, :confirm => 'Are you sure?', :method => :delete %>    </td>
  </tr>
<% end %>
</table>

<%= link_to 'New Member', new_member_path %>

<div id="memberprofile">

</div>


<script type="text/javascript">
  function show_member(m_id) {
   var container = $j("#memberprofile");
        $j.ajax({
            url: '/members/get_member?mid=' + m_id, type: 'get', dataType: 'html',
            processData: false,
            success: function(data) {
                container.html(data);
            }
        });
}
</script>

в ваших маршрутах сделать что-то вроде:

resources :members do
  collection do
    get :get_member
  end
end

в вашем контроллере выполните:

def get_member
  @member = Member.find_by_id(params[:mid])

  render :partial => "member", :layout => false, :locals => {:member => @member}
end

в вашем _member.html.erb частичном

<% unless @member.blank? %>
  <h1><%= @member.name %></h1>
<% else %>
   Record not found :(
<% end %>
...