动态的向列表添加项

[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]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值