rails view全局页面只给某些页面显示

需求如下:
rails的登录和signup页面不需要在header里加 “登录/signup” 链接,其它地方都得需要的.
解决方法是:
view/layouts里加入一个文件,例如是signupandlogin.html.erb
1 <!DOCTYPE html>
2 <html>
3 <head>
4   <title>Find Base Present to Her/His</title>
5   <%= stylesheet_link_tag "application", :media => "all" %>
6   <%= javascript_include_tag "application" %>
7   <%= csrf_meta_tags %>
8 </head>
9 <body>
10   <%= yield %>
11 </body>
12 </html>

然后在controllers/application_controller.rb里加上一行
layout “signupandlogin”, only: [:login, :signup] #说明layout signupandlogin只使用在login和signup里面显示,其它地方不会显示的
其它页面来个全局显示,那就在view/layouts/application.html.erb 里写入:
1 <!DOCTYPE html>
2 <html>
3 <head>
4   <title>Find Base Present to Her/His</title>
5   <%= stylesheet_link_tag "application", :media => "all" %>
6   <%= javascript_include_tag "application" %>
7   <%= csrf_meta_tags %>
8 </head>
9 <body>
10   <!--<%= render 'layouts/header' %> -->
11   <%= render 'layouts/header' %>
12   <%= yield %>
13 </body>
14 </html>

如果想知道原因,对比两个layouts里面的文件就明白了.
解决最终方法: http://guides.rubyonrails.org/layouts_and_rendering.html

rails minimagick裁剪图片并存入mysql

一个可能是小问题,我用了一个多星期的时候才搞好!
在尝试使用不同代码得到一些不同的错误提示,如: 不能转换空string, 文件名太长, 不能对string进行转换……
最后成功的代码如下:
model
require 'mini_magick'
#include Magick
include MiniMagick
class Photo < ActiveRecord::Base
validates_format_of :content_type,
with: /^image/,
message: "--- Must upload photo"

def uploaded_photo=(photo_field)
self.name = base_part_of(photo_field.original_filename)
self.content_type = photo_field.content_type.chomp
#使用read是将photo_field里面的stream读取出来,然后给mini_magick裁剪
img = MiniMagick::Image.read(photo_field.read)
unless img.nil?
#一定要按下面的形式保存图片到数据库里面.
# self.original,self.large,self.thumbnail都是数据库字段
#to_blob是mini_magick里的一个方法,作用是
#@return [String] binary string--源码中对这方法的注释
img_original = img
self.original = img_original.to_blob
img_large = img
img_large.resize("240x360")
self.large = img_large.to_blob
img_thumbnail = img
img_thumbnail.resize("120x180")
self.thumbnail = img_thumbnail.to_blob
end
end

def base_part_of(file_name)
File.basename(file_name).gsub(/[^w._-]/, '')
end
end

controller:
class PhotoController < ApplicationController
def get
@photo = Photo.new
end
def save
@photo = Photo.new(params[:photo])
if @photo.save
redirect_to(action: 'show', id: @photo.id)
else
render(action: :get)
end
end
#使用三个photo_*的方法的目的是为了显示三个不同的已裁剪为不同大小的图片:原图 240x360 120x180
def photo
@photo = Photo.find(params[:id])
#使用send_data是将数据库中的图片的二进制转换为浏览器可以识别的图片方式并显示出来.下同.
send_data(@photo.original,
filename: @photo.name,
type: @photo.content_type,
disposition: "inline")
end
def photo_large
@photo = Photo.find(params[:id])
send_data(@photo.large,
filename: @photo.name,
type: @photo.content_type,
disposition: "inline")
end
def photo_thumbnail
@photo = Photo.find(params[:id])
send_data(@photo.thumbnail,
filename: @photo.name,
type: @photo.content_type,
disposition: "inline")
end
def show
@photo = Photo.find(params[:id])
end
end

view
<%= @photo.comment %>
#将三个不同大小的图片都显示出来
<img src="<%= url_for(:action => 'photo', :id => @photo.id) %>" />
<img src="<%= url_for(:action => 'photo_large', :id => @photo.id) %>" />
<img src="<%= url_for(:action => 'photo_thumbnail', :id => @photo.id) %>" />

引用古时电影结尾的台词:
《完》
外国电影结尾台词:
The End

使用tmux

不知什么原因,将screen改为了tmux,为了更好地使用它,将自己刚发现的topic写下来,记住:
无论在什么时候,都得大概知道这东西有哪些功能。刚好,tmux知道了你想什么,然后就有了一个
bindkey ?
说明:bindkey在我的配置文件里是Ctrl+b, 那上面的topic就是 Ctrl+b ?, 这样tmux就会列出常用的功能。
因为习惯了使用vim,恨不得所有的软件都使用vi模式进行操作。tmux也可以设置vi和emacs模式。我要的是vi,那就在配置里加上:
set-window-option -g mode-keys vi
开始发现的好处就是当使用bindkey + w时,使用j, k就可以上下选择窗口了。如果没加的时候就得使用上,下键去选择,有点麻烦啊
在更改窗口的时候,全部都是同一个名字,也未必难找了点吧,为了更容易找到需要的窗口,可以试一下
bindkey + , NAME # ,是逗号.不是写错的
没错,是逗号. 看来,session的名字真的可以改的!
今天才发现切分屏幕的好处:当写好了一个脚本或程序,不过想一边运行一边修改程序内容。又不想切换一别外的窗口去执行或修改。那就切屏幕吧。tmux提供了:
bindkey + h 左右切分
bindkey + v 上下切分

切分之后怎么换来换去呢?相信我想的事情写tmux的人早就想到了。一开始我使用的方法是:
bindkey + 左右键/bindkey + 上下键
不过更方便的方法就是:
bindkey + o 来左右上下换
进入tmux后无法滚屏。不可能!看资料得到的结果是:
按 bindkey + [ -- 这也称tmux的复制模式
按 j, k键上下滚动。

想退出这个模式,只要按一下q,没错,是q. 这归功于 set-window-option -g mode-keys vi
目前只知道这些毛皮。
下面是我tmux的配置文件:
set-option -g prefix C-b
#unbind-key C-b
#bind-key C-b send-prefix
bind-key -n F11 previous-window
bind-key -n F12 next-window
bind-key C-c new-window
unbind %
bind | split-window -h
bind h split-window -h
unbind '"'
bind - split-window -v
bind v split-window -v
set-option -g visual-activity on
#mouse
#setw -g mode-mouse on
#history
set -g history-limit 10000
setw -g monitor-activity on
setw -g automatic-rename off
setw -g utf8 on
set -g base-index 1
set -g status-utf8 on
set -g status-justify centre
set -g status-bg black
set -g status-fg white
set -g status-left "#[fg=white][ #[default]"
set -g status-left-length 20
set -g status-right-length 25
set -g status-right "#[fg=blue]%H:%M #[fg=white]] #[default]"
set-window-option -g window-status-current-fg yellow

set-window-option -g mode-keys vi