是否有任何教程外面如何脚手架使用许多一对多的关系,一个简单的模型?轨道3脚手架关系模型的
回答
这啧我已经在使用红宝石1.9.2 on Rails的3.0.5产生由步骤下面的步骤testapp写入。另请参阅我使用的宝石的“Gemfile”(整个Testapp可下载,链接在第15部分末尾)。所以这里有云:
1)去,你要创建一个测试应用程序的地方,然后
rails new mynewtestapp
cd mynewtestapp
2)再加入2个模型有has_and_belongs_to_many协会
rails g scaffold book title:string author:string
rails g scaffold user name:string age:integer
3 ),那么你需要创建的连接表为asssociation ...默认情况下轨将寻找由名字都以字母顺序相关的表的名称的表...所以让我们创建一个迁移来建立这样一个表
rails g migration createBooksUsers
4)打开生成的迁移文件,该文件在这一点上看起来像
class CreateBooksUsers < ActiveRecord::Migration
def self.up
end
def self.down
end
end
5)修改成这样
class CreateBooksUsers < ActiveRecord::Migration
def self.up
create_table :books_users, :id => false do |t|
t.integer :book_id
t.integer :user_id
end
end
def self.down
drop_table :books_users
end
end
6)has_and_belongs_to_many协会加入书和用户模型,以及由关系添加的新ID。
app/model/book.rb
class Book < ActiveRecord::Base
attr_accessible :title, :author, :user_ids
has_and_belongs_to_many :users
end
应用程序/模型/ user.rb
class User < ActiveRecord::Base
attr_accessible: :name, :age, :book_ids
has_and_belongs_to_many :books
end
7)现在我们的模型和迁移完成后...可以创建表
rake db:create
rake db:migrate
(以及创建可能不是必要的,如果您使用sqlite3的,或者如果你已经创建了数据库手动使用,这个例子将工作使用SQLite therfore我还没有添加与安装一个数据库管理系统什么。但是,因为有很多,实际上都是值得足够用来被很好的记录,你会发现有关的任何帮助相当快)
8)现在决定哪个对象应包括哪些物件当然被分配....你可以这样做两种方式...我会保持它的简单,并证明了一个......可以说你只有几个用户和要指派那些书......
在这一点上,我会说让我们得到一些外部的帮助,如二进制x建议...但为了简单起见,我会选择simple_form gem over Formtastic。我想每个人都有自己的最爱......但simple_form似乎给你在CSS-造型整体输出到您的愿望更加自由......所以让我们在这一点上安装simple_form,只是做
echo "gem 'simple_form', :git => 'git://github.com/plataformatec/simple_form.git'" >> Gemfile
添加simple_form您的Gemfile,然后运行
bundle install
并安装简单的表格,你的应用程序(即通过
rails g simple_form:install
9)时产生的配置,默认样式和语言文件)来修改我们的图书形成
书形成,现在应该是这样的
应用程序/视图/书籍/ _form。 html.erb
01 <%= form_for(@book) do |f| %>
02 <% if @book.errors.any? %>
03 <div id="error_explanation">
04 <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2>
05
06 <ul>
07 <% @book.errors.full_messages.each do |msg| %>
08 <li><%= msg %></li>
09 <% end %>
10 </ul>
11 </div>
12 <% end %>
13
14 <div class="field">
15 <%= f.label :title %><br />
16 <%= f.text_field :title %>
17 </div>
18 <div class="field">
19 <%= f.label :author %><br />
20 <%= f.text_field :author %>
21 </div>
22 <div class="actions">
23 <%= f.submit %>
24 </div>
25 <% end %>
使用simple_form,我们只需更换一些上面的代码(线1和14 - 24),所以整个文件应该是这样的:
01 <%= simple_form_for(@book) do |f| %>
02 <% if @book.errors.any? %>
03 <div id="error_explanation">
04 <h2><%= pluralize(@book.errors.count, "error") %> prohibited this book from being saved:</h2>
05
06 <ul>
07 <% @book.errors.full_messages.each do |msg| %>
08 <li><%= msg %></li>
09 <% end %>
10 </ul>
11 </div>
12 <% end %>
13
14 <%= f.input :title %>
15 <%= f.input :author %>
16 <%= f.association :users %>
17
18 <%= f.button :submit %>
19
20 <% end %>
10)现在,你可能要启动应用程序
rails s
添加一些用户,然后再添加一本书,并有你的第一个has_and_belongs_to_many形式:
11)嗯,这可能还不是最漂亮的东西看看,但简单的添加样式表将有助于一点...创建一个新文件
public/stylesheets/simple_form.css
并粘贴以下行到它
/* public/stylesheets/simple_form.css */
.simple_form label {
float: left;
width: 100px;
text-align: right;
margin: 2px 10px;
}
.simple_form div.input {
margin-bottom: 10px;
}
.simple_form div.boolean, .simple_form input[type='submit'] {
margin-left: 120px;
}
.simple_form div.boolean label, .simple_form label.collection_radio, .simple_form label.collection_check_boxes{
float: none;
margin: 0;
}
.simple_form .error {
clear: left;
margin-left: 120px;
font-size: 12px;
color: #D00;
display: block;
}
.simple_form .hint {
clear: left;
margin-left: 120px;
font-size: 12px;
color: #555;
display: block;
font-style: italic;
}
然后重新加载页面和... ... Tadaa第一击......
12),如果你不喜欢多-choice,列表框只是回到书本形成
应用程序/视图/书籍/ _form.html.erb
和修改线
15 <%= f.input :author %>
稍微
15 <%= f.input :author, :as => :check_boxes %>
进行检查盒出列表框的....但... EWWW ....看看这个:
13)有些东西似乎有点不对......从左至右的选项已知会偶尔麻烦simple_form greenhorns,但实际上它的一个易于修复的问题
并且在这个小格式问题之上,你也可能想要 看到他背后的大括号名用户的年龄,像“汤姆(25)”
...所以让我们做3个权宜之计
一)取消注释并设置在配置/初始化/ simple_form.rb 2个选项为了包装每个复选框有一个div和复选框集放在一个字段内
# You can wrap a collection of radio/check boxes in a pre-defined tag, defaulting to none.
config.collection_wrapper_tag = :fieldset
# You can wrap each item in a collection of radio/check boxes with a tag, defaulting to none.
config.item_wrapper_tag = :div
二)修改我们的simple_form.css样式表一点,如添加:
fieldset { border: 0; }
...除非你更喜欢围绕字段集的一个很大的丑陋边界
c)在我们的用户模型中创建方法'to_label',因为默认情况下'to_label'是第一个方法simple_form寻找以获得一个String-表示来显示对象。通过一个奇怪的事件我们的模型用户有一个名为“名称”的列。名称也是simple_form在模型中查找的一种方法,我们很幸运,此应用程序迄今为止已运行良好。如果我们已经调用了名字列forename,那么Rails不会列出用户名,而是列出默认的ruby对象表示(例如<#User:521369846>)。我想我们是幸运;-)
应用程序/模型/ user.rb
class User < ActiveRecord::Base
has_and_belongs_to_many :users
def to_label
"#{name} (#{age})"
end
end
和编辑的形式得到一个漂亮的外观...
14)现在只有放映视图需要显示书的业主......那不是太硬或者,只需打开显示视图
应用程序/视图/书籍/ show.html.erb
,并添加利内斯13-16显示bookowners:
01 <p id="notice"><%= notice %></p>
02
03 <p>
04 <b>Title:</b>
05 <%= @book.title %>
06 </p>
07
08 <p>
09 <b>Author:</b>
10 <%= @book.author %>
11 </p>
12
13 <p>
14 <b>Who owns a copy?</b>
15 <%= @book.users.map {|x| x.to_label}.join ', ' %>
16 </p>
17
18 <%= link_to 'Edit', edit_book_path(@book) %> |
19 <%= link_to 'Back', books_path %>
和最后但并非最不重要......演出视图
15)好了,这么多的快速教程,以HABTM或文字has_and_belongs_to_many协会在轨道中。我已经把我的测试应用程序,而在 写这个网上,我创建https://1drv.ms/u/s!Alpu50oGtUZq7AiJkL08QqBiMAjb
写得很好!相当彻底。 – Andrew 2012-04-10 18:58:00
这在轨道3.2.3中仍然有效吗?我觉得我已经正确地执行了步骤,但在步骤11(试图创建书籍时)显示“无法批量分配受保护的属性”时出现错误。如果我只是做错了,请忽略。 :) – timfreilly 2012-05-07 23:13:46
@timfreilly:我还没有试过这个在rails 3.2.3上,但作为“一切都是新的”,我。即Rails和Simple-Form,我猜想几件事实际上是不同的。可悲的是我没有机会使用Rails 3.1+,所以我不能说。试着谷歌你提到的错误消息,我相信你会找到一个解决方案的领导。 – Ingo 2012-05-20 11:53:08
- 1. 有关自定义轨道3脚手架模板
- 2. 红宝石轨道脚手架模型验证问题
- 3. 使用外键关系创建导轨模型和脚手架的教程
- 4. 轨道模型关系和迁移
- 5. 如何与脚手架发电机关联模型轨4.2
- 6. 轨道3验证模型
- 7. 关系类型在轨道
- 8. 轨道关系
- 9. 导轨模型关系
- 10. 角轨文件生成器,如轨道脚手架
- 11. 轨道模型
- 12. 嵌套模型形式轨道3
- 13. 如何编辑导轨脚手架模型生成器
- 14. 轨道路线 - 型号关系
- 15. 更新轨道中的关联模型
- 16. 轨道4的相关模型
- 17. 如何添加一个新的链接在活动脚手架轨道3
- 18. 三种模型之间的轨道关系令人困惑
- 19. 导轨摧毁脚手架没有以前的导轨克脚手架
- 20. 这两个轨道模型之间如何建立关系
- 21. 轨道4 - 思考对相关模型
- 22. 轨道3 Heroku的推高手问题
- 23. 脚手架导轨中的外键下拉3视图
- 24. Subsonic 3和脚手架
- 25. Grails 3脚手架问题
- 26. 亚音速3脚手架
- 27. 在ASP.NET MVC 3和实体框架中使用继承的脚手架模型
- 28. 延伸的轨道模型
- 29. 三列加入活动脚手架轨道
- 30. 脚手架 - 轨道产生 - 数据迁移高清在
使用谷歌搜索给我这个:http://jrhicks.net/Projects/rails/has_many_and_belongs_to_many.pdf,我希望你可以使用 – rsplak 2011-03-21 21:54:46
这是5.5年前写的!我怀疑它在Rails 3中有效。 – 2011-03-21 21:57:48
你到底在找什么?多对多的显示会变得棘手。我认为生成一些东西并不可行。 – 2011-03-21 22:01:18