Ruby on Rails学习心得(四)数据库外键和迁移

做完了注册登录部分,接下来就是发帖部分了

先来创建controller ,执行rails g controller Blogs new create show

然后是创建表,执行rails g model Blog title:string content:text

创建完毕。

以为这样就可以了。。。。太单纯了,我,忘记了用户和帖子之间是有关联的。。。。。

先修改model的,先修改app/models/user如下


class User < ActiveRecord::Base
	has_many :blogs, dependent: :destroy
end
dependent: :destroy这句的话可以在使用@user.destroy的时候吧关联的帖子都删掉


然后就是修改app/models/blog如下


class Blog < ActiveRecord::Base
	belongs_to :user
end
如此就可以做到模型的一对多了。。。但是还要修改数据库的,要在Blog的表中添加一个user_id的字段


在迁移文件里面执行操作,db/migrate/XXXXX_create_blogs.rb,添加add_column :blogs, :user_id, :integer

class CreateBlogs < ActiveRecord::Migration
  def change
    create_table :blogs do |t|
      t.string :title
      t.text :content
      t.integer :user_id

      t.timestamps
    end
    add_column :blogs, :user_id, :integer
  end
end


先实行rake db:rollback,回滚到之前的版本(这时候数据库的数据中对应的表的数据会被清空)

接着就执行rake db:migrate命令这样基本配置就玩成了,接下来的就是一些逻辑

我发帖的部分如下:


<%= form_for(:blog,:url=>'/blogs/create') do |f| %>
    <div class="field">
	<%= f.label :title %>
       <%= f.text_field :title %>
    </div>
    <div class="field">
       <%= f.label :content %>
       <%= f.text_area :content,:style=>"height: 227px; width: 425px;"%>
    </div>
    <div class="actions">
       <%= f.submit :'发帖'%>
    </div>
<% end %>
对应的create方法如下(注意在config/routes.rb中,改为post "blogs/create")


然后对应的create方法如下


def create
  	params.permit!
  	@user = User.find_by_name(session['loginedUser'])
  	@blog = Blog.new(params[:blog])
  	@user.blogs << @blog
  	@blog.user = @user;
  	@blog.save
  	redirect_to :controller=>'blogs',:action=>'show'
  end
这样就可以了。


在这次我发现了一个问题,就是原来Ruby的默认的session是保存在cookies中的,所以最大只能有4K(好像是吧),然后上一次我是把整个user对象都保存到session中的,所以这次改为了把user.name保存到session中。否则就得改配置(这个我改了一次马上放弃了,好像很复杂),不然后报overflow的错。

至于通过user来查找blogs的话可以这样(不知道是不是最正常的做法)


@user = User.find_by_name(session['loginedUser'])
  if @user != nil
   @blogs = Blog.where(user_id: @user.id)
 end
然后在页面上遍历


<div style="width: 500px;">
	<% if @blogs != nil%>
		<% @blogs.each do |blog| %>
			<div style="border:1px solid;">
				<p>title:<%= blog.title %></p>
				<p>content:<%= blog.content %></p>
				<p>created:<%= blog.created_at%></p>
				<button>回复</button>
			</div>
		<% end %>
	<% end %>
</div>
今天就到此为止了。。。。。。

转载于:https://my.oschina.net/zlLeaf/blog/151578

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值