关系模型的rails 3脚手架

如何解决关系模型的rails 3脚手架

是否有任何教程可以建立一个使用多对多关系的简单模型?     

解决方法

我在Rails 3.0.5上使用ruby 1.9.2逐步创建以下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),那么您需要为该关联创建连接表...默认情况下,rails会寻找一个表,该表的名称由按字母顺序排列的两个相关表的名称组成...因此,让我们创建一个迁移来创建这样一个表表
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
app / model / 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进行工作。但是由于有很多并且实际上所有值得使用的东西都有很好的记录,您会很快找到任何帮助) 8)现在决定将哪个对象分配给哪个对象。...当然,您可以同时使用两种方法...我将简单说明这一点,并向其中一个演示...可以说您只有几个用户并希望将它们分配给书籍... 在这一点上,我想说让我们获得一些外部帮助,例如建议使用二进制x ...但是为了简单起见,我会选择Formtastic作为simple_form gem。我想每个人都有自己的收藏夹...但是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)是时候修改我们的书籍表格了 现在的书形应该是这样的 app / views / books / _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)如果您不喜欢多选列表框,请返回书籍表格 app / views / books / _form.html.erb 并修改行
15      <%= f.input :author %>
稍微
15      <%= f.input :author,:as => :check_boxes %>
使列表框之外的复选框...。但是... ewww...。看一下: 13)似乎有些错误...选项的从左到右表示有时会麻烦simple_form greenhorns,但实际上这是一个易于解决的问题 并且除了这个小格式问题外,您可能还希望看到用户的年龄在括号内落后于他的名字,例如\'Tom(25)\' ...所以让我们做3个快速修复 a)取消注释并在config / initializers / 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
b)稍微修改我们的simple_form.css样式表,如添加所示:
fieldset { border: 0; }
...除非您不希望在田野周围使用大而丑陋的边框 c)在我们的用户模型中创建方法“ to_label \”,因为默认情况下,“ to_label \”是第一个方法simple_form寻找,以获取用于表示对象的字符串表示形式。由于发生了一起奇怪的事件,我们的模型用户有一个名为“名称”的列。就像name也是simple_form在模型中寻找的方法一样,我们很幸运这个应用程序到目前为止已经工作了。如果我们改用name列的名字命名,Rails不会列出用户名,而是列出默认的红宝石对象表示形式(例如<#User:521369846>)。猜猜我们很幸运;-) app / models / user.rb
class User < ActiveRecord::Base
  has_and_belongs_to_many :users

  def to_label
    \"#{name} (#{age})\"
  end

end
编辑表格看起来很漂亮... 14)现在,只有显示视图需要显示图书所有者...也不太难,只需打开显示视图 app / views / books / show.html.erb 并添加第13-16行以显示图书所有者:
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或用rails中的has_and_belongs_to_many关联来说非常重要。我将在网上撰写此应用程序时创建的测试应用程序放在了 https://1drv.ms/u/s!Alpu50oGtUZq7AiJkL08QqBiMAjb     ,观看Ryan Bate \关于令牌字段的教程: http://railscasts.com/episodes/258-token-fields 这是在Rails中建立多对多关系的简单方法     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-