もう少し、何をしたいのかを明確に意識して、何をすべきなのか、何をしているのかを一行一行考えながら進めてみる事をお勧めします。
特に、hoge.fuga.buildみたいなものは、内部でどのような処理がなされているのか(歴史的に見ると、いくつかの処理に分かれていたものを一行出かけるように改良されたメソッドです)を意識するべきでしょう。
Ruby
1# app/controllers/sites_controller.rb
2class SitesController < ApplicationController
3 # このコントローラでのアクションでは、全て最初にログインしているユーザーをインスタンス化する
4 before_filter :signin_user
5
6 private
7 # サインインしているユーザーをインスタンス化する
8 def signin_user
9 # 前提として、サインインしているユーザーのIDはsession[:signin_id]に入っているものとする
10 @user = User.find(session[:signin_id])
11 end
12
13 public
14 # サインイン中のユーザーのsitesを一覧表示する
15 def index
16 @sites = @user.sites
17 end
18
19 def new
20 @site = Site.new
21 end
22
23 def create
24 @site = Site.new # 空のsiteを生成
25 @site.attributes = params[:site] # ビューで入力された値をセットする
26 @site.user = @user # 新しいsiteと関連するのはログイン中のユーザー
27 if @site.save
28 flash[:success] = "新しいSiteを追加しました"
29 redirect_to action: :index # 成功したので一覧ページにリダイレクト
30 else
31 render action: :new # 失敗したので、newページに戻る
32 end
33 end
34
35 # 以下略
36end
37
38# app/views/sites/index.html.erb
39<h1><%= @user.name %>のSite</h1>
40<ul>
41<% @sites.each do |site| %>
42 <li>
43 <%= link_to site.content, site.name, target: "_blank" %><!-- href=site.name, text=site.content target="_blank"のaタグを生成する -->
44 </li>
45<% end %>
46</ul>
47
48# app/views/sites/new.html.erb
49<%= render :partial 'form' %>
50
51# app/views/sites/_form.html.erb
52<%= form_for @site do |f| %>
53 <% if @site.errors.any? %>
54 <% @site.errors.full_messages.each do |msg| %>
55 <%= msg %><br />
56 <% end %>
57 <% end %>
58 <%= f.text_field :name %><br />
59 <%= f.text_field :content %><br />
60 <%= f.submit %>
61<% end %>
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/04/08 03:17