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

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


1.微博的数据模型

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

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


2.显示微博

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

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

<div class="span8">
    <% if @user.microposts.any? %>
      <h3>Microposts (<%= @user.microposts.count %>)</h3>
      <ol class="microposts">
        <%= render @microposts %>
      </ol>
      <%= will_paginate @microposts %>
    <% end %>
  </div>

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

<li>
  <span class="content"><%= micropost.content %></span>
  <span class="timestamp">
    Posted <%= time_ago_in_words(micropost.created_at) %> ago.
  </span>
</li>

剩下的就是修改控制器:

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

3. 微博操作-发微博

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

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

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

这样就可以了。


访问限制:

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


发微博:

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

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

这里只列出新增的部分:

<% if signed_in? %>
  <div class="row">
    <aside class="span4">
      <section>
        <%= render 'shared/user_info' %>
      </section>
      <section>
        <%= render 'shared/micropost_form' %>
      </section>
    </aside>
  </div>
<% else %>

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

<a href="<%= user_path(current_user) %>">
  <%= gravatar_for current_user, size: 52 %>
</a>
<h1>
  <%= current_user.name %>
</h1>
<span>
  <%= link_to "view my profile", current_user %>
</span>
<span>
  <%= pluralize(current_user.microposts.count, "micropost") %>
</span>

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

<%= form_for(@micropost) do |f| %>
  <%= render 'shared/error_messages', object: f.object %>
  <div class="field">
    <%= f.text_area :content, placeholder: "Compose new micropost..." %>
  </div>
  <%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>

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

在静态页面的action中写入:

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

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


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


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值