前几日再看《Rails Cookbook》时有一章叫‘Processing Dynamically Created Input Fields’处理动态创建的输入项(大概是这么翻译吧)觉得挺好可以在以后当作用户权限或角色设置来用。于是实际练了一下但发现一个错误
先把源码发一下,再把错误用有注释标出来
db/schema.rb:
ActiveRecord::Schema.define(:version => 0) do
create_table "roles", :force => true do |t|
t.column "name", :string, :limit => 80
end
create_table "users", :force => true do |t|
t.column "login", :string, :limit => 80
end
create_table "permissions", :id => false, :force => true do |t|
t.column "role_id", :integer, :default => 0, :null => false
t.column "user_id", :integer, :default => 0, :null => false
end
end
mode 关系设置:
class Role < ActiveRecord::Base
has_many :permissions, :dependent => true
has_many :users, :through => :permissions
end
class User < ActiveRecord::Base
has_many :permissions, :dependent => true
has_many :roles, :through => :permissions
end
class Permission < ActiveRecord::Base
belongs_to :role
belongs_to :user
end
app/controllers/user_controller.rb
class UserController < ApplicationController
def list_perms
@users = User.find(:all, :order => "login")
@roles = Role.find(:all, :order => "name")
end
def update_perms
Permission.transaction do
Permission.delete_all
for user in User.find(:all)
for role in Role.find(:all)
if params[:perm]["#{user.id}-#{role.id}"] == "on"
Permission.create(:user_id => user.id, :role_id => role.id)
end
end
end
end
flash[:notice] = "Permissions Updated."
redirect_to :action => "list_perms"
end
end
app/views/user/list_perms.rhtml
<h2>Administer Permissions</h2>
<% if flash[:notice] -%>
<p style="color: red;"><%= flash[:notice] %></p>
<% end %>
<% form_tag :action => "update_perms" do %>
<table style="background: #ccc;">
<tr>
<th> </th>
<% for user in @users %>
<th><%= user.login %></th>
<% end %>
</tr>
<% for role in @roles %>
<tr style="background: <%= cycle("#ffc","white") %>;">
<td align="right"><strong><%= role.name %></strong></td>
<% for user in @users %>
<td align="center">
<%#注意这里get_perm()方法的参数顺序%>
<%= get_perm(user.id, role.id) %>
</td>
<% end %>
<% end %>
</table>
<br />
<%= submit_tag "Save Changes" %>
<% end %>
app/helpers/user_helper.rb:
module UserHelper
#注意这里get_perm()方法的参数顺序,发现错误了吧 结果是能够正常显示单更新时候出现异常
def get_perm(role_id, user_id)
name = "perm[#{user_id}-#{role_id}]"
perm = Permission.find_by_role_id_and_user_id(role_id, user_id)
color = "#f66"
unless perm.nil?
color = "#9f9"
checked = 'checked=\"checked\"'
end
return "<span style=\"background: #{color};\"><input name=\"#{name}\"
type=\"checkbox\" #{checked}></span>"
end
end
附上一张图
- 描述: xiaoguo
- 大小: 11.4 KB
分享到:
相关推荐
大家可以下载这本书<rails cookbook> 英文版的,不过代码是很清楚的!看懂是没有问题的! 博文链接:https://sunfengcheng.iteye.com/blog/220265
rails cookbook的中文版。共2个文件,使用超星阅读器或用UnicornViewer直接打开解压后的zip文件。UnicornViewer可在我发布的资源中找到
rails cookbook的中文版。共2个文件,使用超星阅读器或用UnicornViewer直接打开解压后的zip文件。UnicornViewer可在我发布的资源中找到
顾名思义,就是讲rails的小技巧,给你上rails的大餐,都是大牛们写的文章,对于想掌握常用技巧的开发者很有帮助
Ruby on Rails中文指南
Ruby On Rails中文教材(PDF)
rails指南 中文版
使用Aptana+Rails开发Rails Web应用 有Aptana的安装配置等等,中文
博文链接:https://sharpkit.iteye.com/blog/171519
敏捷Rails中文教程 敏捷Rails中文教程 敏捷Rails中文教程
rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails 2.3.2离线安装rails ...
在过去的几年中,《Ruby on Rails Tutorial》这本书被视为介绍使用 Rails 进行 Web 开发的先驱者。 在这个全球互联的世界中,计算机编程和 Web 应用程序开发都在迅猛发展,我很期待能为中国的开发者提供 Ruby on ...
Google Sign-In for Rails 实现将Google登录集成到您的Rails应用中
rails-assets, 在 Rails 中,资产管理的解决 Rails 资产 Bundler 到 Bower 代理本自述文件涉及项目的开发方面。 访问站点了解如何在你的应用程序中使用 Rails 资产。 插件开发设置git clone git@github.com:tenex/r
《Rails之道》详细讨论了Rails的程序代码并通过分析Rails中的代码片段来深入解释它的功能,同时,《Rails之道》部分章节也摘录了一些API文档中的内容,使读者能够快速地找到对应的API文档、相关的示例代码以及深入...
Rails Guides 5.0 中文版
入门rails的第一个demo
[Pragmatic Bookshelf] Crafting Rails Applications Expert Practices for Everyday Rails Development (E-Book) ☆ 图书概要:☆ Rails 3 is a huge step forward. You can now easily extend the framework, ...
本资源是参照rails敏捷开发第四版书中的例子,rails的版本是rails3.2.6