【Rails学习笔记】用户微博【上】


这节主要实现用户的微博功能,用户能够发微博,能够删除自己的微博。


1.微博的数据模型

这部分比较简单,前面很多小练习都做过了,将User模型与之关联,形成一对多的关系即可

另外要加上删除的关联功能,删除用户则用户的所有微博也全部删除。 


2.显示微博

这里还是用控制台去生成微博,做的工作主要是编写显示微博的页面、以及分页显示

在用户资料页面show中如下:

  1. <div class="span8">  
  2.     <% if @user.microposts.any? %>  
  3.       <h3>Microposts (<%= @user.microposts.count %>)</h3>  
  4.       <ol class="microposts">  
  5.         <%= render @microposts %>  
  6.       </ol>  
  7.       <%= will_paginate @microposts %>  
  8.     <% end %>  
  9.   </div>  

至于显示单篇微博的局部视图如下:

  1. <li>  
  2.   <span class="content"><%= micropost.content %></span>  
  3.   <span class="timestamp">  
  4.     Posted <%= time_ago_in_words(micropost.created_at) %> ago.  
  5.   </span>  
  6. </li>  

剩下的就是修改控制器:

  1. def show  
  2.     @user = User.find(params[:id])  
  3.     @microposts = @user.microposts.paginate(page: params[:page])  
  4. end  

3. 微博操作-发微博

对于microposts的处理与前面users和sessions不同,也就是说,Microposts 资源相关的页面不是通过 Microposts 控制器实现的,而是依赖于 Users 和 StaticPages 控制器。

以前我们模拟一个简单的博客,post路由是嵌套在users下面的,实际上可以更简单。

resources :microposts, only: [:create, :destroy]

这样就可以了。


访问限制:

这里必须加入一下限制,无论是create还是destroy都必须先登录。于是在Microposts的控制器前面加上过滤器


发微博:

这部分的主要工作在首页上。

修改首页视图,使其登录和未登录时加载不同HTML,登录时具有发微博功能。

这里只列出新增的部分:

  1. <% if signed_in? %>  
  2.   <div class="row">  
  3.     <aside class="span4">  
  4.       <section>  
  5.         <%= render 'shared/user_info' %>  
  6.       </section>  
  7.       <section>  
  8.         <%= render 'shared/micropost_form' %>  
  9.       </section>  
  10.     </aside>  
  11.   </div>  
  12. <% else %>  

用户信息的局部视图如下:

  1. <a href="<%= user_path(current_user) %>">  
  2.   <%= gravatar_for current_user, size: 52 %>  
  3. </a>  
  4. <h1>  
  5.   <%= current_user.name %>  
  6. </h1>  
  7. <span>  
  8.   <%= link_to "view my profile", current_user %>  
  9. </span>  
  10. <span>  
  11.   <%= pluralize(current_user.microposts.count, "micropost") %>  
  12. </span>  

发微博功能边框的视图如下:

  1. <%= form_for(@micropostdo |f| %>  
  2.   <%= render 'shared/error_messages', object: f.object %>  
  3.   <div class="field">  
  4.     <%= f.text_area :content, placeholder: "Compose new micropost..." %>  
  5.   </div>  
  6.   <%= f.submit "Post"class"btn btn-large btn-primary" %>  
  7. <% end %>  

此时@micropost变量是否生成要看用户是否登录。

在静态页面的action中写入:

  1. def home  
  2.     @micropost = current_user.microposts.build if signed_in?  
  3. end  

另外把_error_messages.html.erb里面的@user变成object,使其更具有通用性,凡是用到这个视图的都需要增加一个参数,主要是new和edit表单。


这样便实现了发布微博的功能。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值