tixture55’s diary

主にプログラミング関係の日記です。

ruby on rails4のおさらい(MVC)

railsのおさらいです。私の環境では、railsは4.1.1でした。

 

controllerのaction定義の仕方

 

def new  
@project = Project.new
end

 

またbefore_actionを指定することで、showやindexアクションの前に特定のアクションをフックできます。

 

before_action :set_article 

def show
end

def edit
end

def set_article
@article = Article.find(params[:id])
end

 

privateキーワードを使う

rubyのprivateキーワードはJavaなどとは違い、親で指定したprivateなメソッドに子供クラスからアクセスできます。

 

private  
def undo_link
if can? :revert, :versions
version = @comment.versions.scoped.last
view_context.link_to("undo", revert_version_path(version), :method => :post) if can? :revert, version
end
end

 

 

Rails4のrequire,permit

rails4ではストロングパラメータというメソッドが追加されました。(require, permit)

 

def user_params
params.require(:user).permit(:name, :email)
end

 requireを指定することで特定のキーを条件にフィルタをかけられます。またpermitを使えば取得したいレコードだけ取得できます。

 

viewのフォームの書き方の一例

 

<%= form_for @project do |f| %>  
<p>
<%= f.label :title %><br>               
<%= f.text_field :title %>
<% if @project.errors.any? %>
<%= @project.errors.messages[:title][0] %>
<% end %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>

※ @で始まる変数をインスタンス変数という。インスタンス変数は頭文字は小文字という規則がある。

  • <%= @project.errors.messages[:title][0] %>で使われるエラーメッセージはmodelに書くことになる。
  • <%= form_for @project do |f| %>  のfは別にどんな名前でもいい。ここで使われている@projectはcontrollerのアクションで生成した変数、例えば、@project = Project.find(params[:id]) を参照している。

 

modelクラスの記述 

 

class Project < ActiveRecord::Base
has_many :projects
validates :title,
presence: { message: "入力してください" },
length: { minimum: 3, message: "3文字以上必要"}
def self.search(search) #self.でクラスメソッドとしている
if search # Controllerから渡されたパラメータが!= nilの場合は、titleカラムを部分一致検索
Project.where(['name LIKE ?', "%#{search}%"])
else
Project.all #全て表示。
end
end
end


 上記のようにアソシエーションの指定やバリデーションルールを定義する。ActiveRecordのBaseクラスを継承しているのでORMが使える。