动态的向列表添加项

[size=large][color=olive]动态的向列表添加项

这里使用一个简单的  tags 表
  其实以前我有一个项目作的时候比这个复杂多了, 这里就简单讲一下基本的使用方法,要运用到实际项目中还需要你能触类旁通.
   定义一格tags 的表.

db/migrate/001_create_tags.rb:

class CreateTags < ActiveRecord::Migration
  def self.up
    create_table :tags do |t|
      t.column :name, :string
      t.column :created_on, :datetime
    end
  end

  def self.down
    drop_table :tags
  end
end
通过在模型中使用 active Record 校验 可以保证 tag  是唯一的.
 
app/models/tag.rb:

class Tag < ActiveRecord::Base

  validates_uniqueness_of :name
end
在布局中调用prototype.js  和他所对应的样式。
app/views/layouts/tags.rhtml:

<html>
  <head>
    <title>Tags</title>
    <%= javascript_include_tag :defaults %>
  </head> 
  <body>  
    <%= yield  %>
  </body> 
</html>

在 list.rhtml 中包含新的标签表单核一个 调用局部模版,来显示列表。
app/views/tags/list.rhtml:

<h1>Tags</h1>

<% form_remote_tag(:update => 'list', 
                    :complete => visual_effect(:highlight, 'list'),
                    :url => { :action => :add } ) do %>
  <%= text_field_tag :name %>
  <%= submit_tag "Add Tag" %>
<% end %>

<div id="list">
  <%= render :partial => "tags", :locals => {:tags => @tags} %>
</div>

局部模版负责生成选择列表,
app/views/tags/_tags.rhtml:

Total Tags: <b><%= tags.length %></b>;

<select name="tag" multiple="true" size="6">
  <% i = 1 %>
  <% for tag in tags %>
    <option value="<%= i %>"><%= tag.name %></option>
    <% i += 1 %> 
  <% end %>
</select>

控制器包含两个动作, 一个是list ,他传递一个存储的标签列表来用作出示显示。 另一个是ADD , 添加新的标签,重新渲染模版。

app/controllers/tags_controller.rb:

class TagsController < ApplicationController

  def list
    @tags = Tag.find(:all,:order => "created_on desc")
  end

  def add
    Tag.create(:name => params[:name])
    @tags = Tag.find(:all, :order => "created_on desc")
    render :partial => "tags", :locals => {:tags => @tags}, :layout => false
  end
end
[/color][/size]

你可能感兴趣的:(JavaScript,java,prototype,UP,ActiveRecord)