做完了注册登录部分,接下来就是发帖部分了
先来创建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>
今天就到此为止了。。。。。。