Rails 3和ajax部分

时间:2011-03-22 20:26:14

标签: jquery ajax ruby-on-rails-3

我有:devices.html.erb

<p id="notice"><%= notice %></p>

<p>
  <b>Kategorija:</b>
  <%= @device.category.name %>
</p>

<p>
  <b>Gamintojas:</b>
  <%= @device.manufacturer.name %>
</p>

<p>
  <b>Konkurentas:</b>
  <%= @device.competitor.name %>
</p>

<p>
  <b>Pavadinimas:</b>
  <%= @device.name %>
</p>

<p>
  <b>Aprašymas:</b>
  <%= @device.description %>
</p>


<%= link_to 'Redaguoti', edit_device_path(@device) %> |
<%= link_to 'Atgal', devices_path %>
<div id= "specification_value">
<%= render :partial => "specification_values/specification_values_list", :locals => {:specification_values=>@device.specification_values} %>
</div>
<%= render :partial => "specification_values/new_specification_value", :locals=>{:specification_value=>SpecificationValue.new(:device_id=>@device.id)} %> 

有2个部分,第一个_specification_values_list

列出specification_values

<table>
  <tr>
    <th>Device</th>
    <th>Specification</th>
    <th>Value</th>
    <th></th>
    <th></th>
    <th></th>
  </tr>

<% specification_values.each do |specification_value| %>
  <tr>
    <td><%= specification_value.device_id %></td>
    <td><%= specification_value.specification_id %></td>
    <td><%= specification_value.value %></td>
    <td><%= link_to 'Show', specification_value %></td>
    <td><%= link_to 'Edit', edit_specification_value_path(specification_value) %></td>
    <td><%= link_to 'Destroy', specification_value, :confirm => 'Are you sure?', :method => :delete, :remote=>true %></td>
  </tr>
<% end %>
</table>

<br />

<%= link_to 'New Specification value', new_specification_value_path %>

和:_new_specification_value

<h1>New specification_value</h1>

<%= form_for(specification_value, :remote => true) do |f| %>
  <% if specification_value.errors.any? %>
    <div id="error_explanation">
      <h2><%= pluralize(specification_value.errors.count, "error") %> prohibited this specification_value from being saved:</h2>

      <ul>
      <% specification_value.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

  <div class="field">
    <%= f.label :device_id %><br />
    <%= f.text_field :device_id %>
  </div>
  <div class="field">
    <%= f.label :specification_id %><br />
    <%= f.text_field :specification_id %>
  </div>
  <div class="field">
    <%= f.label :value %><br />
    <%= f.text_field :value %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>


<%= link_to 'Back', specification_values_path %>

我有jquery里面,我想做,当我添加新的specification_value时,它将在部分列表中与ajax在devices.html.erb中出现。谢谢。

1 个答案:

答案 0 :(得分:0)

我使用ajax使用以下代码渲染部分:

在你的主文件中输入:

<div id="phone_numbers">
    <%= render @phone_number, :phone_types => PhoneNumbersHelper::phone_types %>
</div>
<%= link_to_function "Add Number", do |page|
    partial = escape_javascript( render PhoneNumber.new, :phone_types => PhoneNumbersHelper::phone_types )
    page << "$('#phone_numbers').append(\"#{partial}\")"        
end %>

当您点击“添加号码”时,将生成“_phone_number”并将其加载到ID为“phone_numbers”的div中

在我的部分中我有:

<div class="phone_number">
<%= fields_for 'location[numbers][]', phone_number do |f| %>
    <div class="field">
        <%= f.label "Phone Number" %><br/>
        +(<%= f.text_field :code, :class => 'phone_code' %>)-
        <%= f.text_field :number, :class => 'phone_number' %>
        <%= f.select :ptype, phone_types %>
    </div>
<% end%>
</div>

我有'location [numbers] []'的原因是因为我在Location模型的视图中使用_phone_number partial。我的位置模型具有以下内容:

attr_accessor :numbers

这允许位置[数字]设置“数字”访问者。 我们在[location]之后有[]的原因是允许将多个电话号码传递给模型。

此外,您需要在位置模型

中保存before_save中的电话号码
before_save :save_numbers

def save_numbers
   unless numbers.nil?
        numbers.each do |n|
            unless n[:number].nil? || n[:code].nil? || n[:number].blank? || n[:code].blank?
                phone_numbers.build(n)
            end
        end
    end
end

我的模特位置也有_many:phone_numbers;这解释了phone_numbers.build

现在到控制器:

def new
    1.times { @location.phone_numbers.build }
    @phone_numbers = @location.phone_numbers
    @phone_number = @phone_numbers[0]
end

请注意,在上面的代码中我使用了@phone_number,我传递给了我的渲染部分。 Rails 3支持集合,这意味着,如果你想要创建默认的很多电话号码,你可以将@phone_numbers传递给render部署方法,rails会自动生成多个电话号码!

我希望这会有所帮助...... =)