Skip to content

Instantly share code, notes, and snippets.

@k5uk
Created August 4, 2014 11:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save k5uk/f229928585fe0ccfb459 to your computer and use it in GitHub Desktop.
Save k5uk/f229928585fe0ccfb459 to your computer and use it in GitHub Desktop.
ドットインストール「Ruby on Rails 4入門」メモ ref: http://qiita.com/keisukeohta/items/c31a9d8e496dda859d55
rails new myapp
localhost:3000/users
rails new taskapp --skip-bundle
localhost:3000
rails g model Project title:string #gはgenerateの略
rake db:migrate
rails console
p = Project.new(title: "p1")
Project.create(title: "p2")
select * from projects;
rails g controller Projects
class ProjectsController < ApplicationController
def index
@projects = Project.all #viewの中でそのまま使える
end
end
<h1>Projects</h1>
<u1>
<% @projects.each do |project| %>
<li><%= project.title %></li>
<% end %>
</u1>
localhost:3000/projects
# gem 'therubyracer', platforms: ruby
<%= image_tag "logo.png" %>
body { background: #eee;}
<h1>Projects</h1>
<u1>
<% @projects.each do |project| %>
<li><%= link_to project.title, project_path(project.id) %></li>
<% end %>
</u1>
class ProjectsController < ApplicationController
def index
@projects = Project.all #viewの中でそのまま使える
end
def show
@Project = Project.find(params[:id]) #URLで渡ってきた数字はparamsで取ってこれる。シンボルはroutesに書かれているid。
end
end
<h1><%= @project.title %></h1>
<p><%= link_to "Add New", new_project_path %></p>
def new
@project = Project.new
end
<h1>Add New</h1>
<%= form_for @project do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
def create
@project = Project.new(project_params)
@project.save
redirect_to projects_path
end
private
def project_params #project_paramsについてはprivate関数で定義するのが代表的な手法 params[:project].permit[:title] #projectで渡ってきた中の物のうち、タイトルだけを引っ張ってきてねという意味。セキュリティ上、フォームから渡ってきたものについてプロジェクトとタイトルだけ必要という時はこういうふうにフィルタリングをかけるのが最近のやり方。
end
validates :title, presence: true
bundle install
def create
@project = Project.new(project_params)
if @project.save
redirect_to projects_path
else
render 'new' #newのviewに戻る
end
end
<h1>Add New</h1>
<%= form_for @project do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
<% if @project.errors.any? %> <%# project.errorsにエラーがあるかどうかで条件分岐 %>
<%= @project.errors.inspect %>
<% end %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
messages[:title][0]
class Project < ActiveRecord::Base
validates :title, presence: {message: "入力してください"}
end
class Project < ActiveRecord::Base
validates :title,
presence: {message: "入力してください"},
length: {minimum: 3, message: "短すぎ!"}
end
<%= link_to "[edit]", edit_project_path(project.id) %>
def edit
@project = Project.find(params[:id])
end
<h1>Edit</h1>
<%= form_for @project do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
<% if @project.errors.any? %> <%# project.errorsにエラーがあるかどうかで条件分岐 %>
<%= @project.errors.messages[:title][0] %> <%# :titleをキーにして配列の0番目を表示 %>
<% end %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
def update
@project = Project.find(params[:id])
if @project.update(project_params)
redirect_to projects_path
else
render 'edit'
end
end
<%= render 'form' %>
<%= form_for @project do |f| %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
<% if @project.errors.any? %> <%# project.errorsにエラーがあるかどうかで条件分岐 %>
<%= @project.errors.messages[:title][0] %> <%# :titleをキーにして配列の0番目を表示 %>
<% end %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
<h1>Add New</h1>
<%= render 'form' %>
<%= link_to "[Delete]", project_path(project.id), method: delete, data: { confirm: "are you sure?" } %>
def destroy
@project = Project.find(params[:id])
@project.destroy
redirect_to projects_path
end
@project = Project.find(params[:id])
before_action :set_project, only: [:show, :edit, :update, :destroy]
def set_project
@project = Project.find(params[:id])
end
rails g model Task title done:boolean project:references
t.boolean :done, default: false
localhost:3000
rails g controller Tasks
has_many :tasks
resources :projects do
resources :tasks, only: [:create, :destroy]
end
<h1><%= @project.title %></h1>
<u1>
<% @project.tasks.each do |task| %>
<li><%= task.title %></li>
<% end %>
<li>
<%= form_for [@project, @project.tasks.build] do |f| %>
<%= f.text_field :title %>
<%= f.submit %>
<% end %>
</li>
</u1>
class TasksController < ApplicationController
def create
@project = Project.find(params[:project_id])
@task = @project.tasks.create(task_params)
redirect_to project_path(@project.id)
end
private
def task_params
params[:task].permit(:title)
end
end
class Task < ActiveRecord::Base
belongs_to :project
validates :title, presence: true
end
<h1><%= @project.title %></h1>
<u1>
<% @project.tasks.each do |task| %>
<li>
<%= task.title %>
<%= link_to "[Delete]", project_task_path(task.project_id, task.id), method: :delete, data: { confirm: "are you sure?" } %>
</li>
<% end %>
<li>
<%= form_for [@project, @project.tasks.build] do |f| %>
<%= f.text_field :title %>
<%= f.submit %>
<% end %>
</li>
</u1>
def destroy
@task = Task.find(params[:id])
@task.destroy
redirect_to project_path(params[:project_id])
end
rails generate scaffold User name:string score:integer
<%= check_box_tag '', '', task.done, {'data-id' => task.id, 'data-project_id' => task.project_id} %>
<script>
$(function(){
$("input[type=checkbox]").click(function(){
$.post('/projects/'+$(this).data('project_id')+'/tasks/'+$(this).data('id')+'/toggle');
});
})
</script>
post '/projects/:project_id/tasks/:id/toggle' => 'tasks#toggle'
def toggle
@task = Task.find(params[:id])
@task.done = !@task.done
@task.save
end
render nothing: true
<%= link_to project.title, project_path(project.id) %> (<%= project.tasks.count %>)
<%= link_to project.title, project_path(project.id) %> (<%= project.tasks.unfinished.count %>/<%= project.tasks.count %>)
rake db:migrate
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment