プロジェクト

全般

プロフィール

ScaffoldPlusAnswerThree » 履歴 » バージョン 4

Yuumi Yoshida, 2008-01-13 16:10

1 1 Yuumi Yoshida
= 演習3解答例 =
2
3
== 作業手順 ==
4
{{{
5
ruby script/generate model user name:string user_id:integer
6
ruby script/generate migration AddUserIdToTodo user_id:integer
7
rake db:migrate
8
}}}
9
10
== 変更点 ==
11
12
=== 1.  app/models/user.rb ===
13
Todoとの一対多の関連を記述
14
{{{
15 2 Yuumi Yoshida
#!html
16
<pre class="wiki">class User &lt; ActiveRecord::Base
17
  <font color="red">has_many :todos</font>
18 1 Yuumi Yoshida
end
19 2 Yuumi Yoshida
</pre>
20 1 Yuumi Yoshida
}}}
21
22
=== 2.  app/models/todo.rb ===
23
Userとの多対一の関連(従属)を記述
24
{{{
25 2 Yuumi Yoshida
#!html
26
<pre class="wiki">class Todo &lt; ActiveRecord::Base
27
  <font color="red">belongs_to :user</font>
28 1 Yuumi Yoshida
end
29 2 Yuumi Yoshida
</pre>
30 1 Yuumi Yoshida
}}}
31
32
=== 3. app/views/todos/index.html.erb ===
33
user.nameカラム表示用のコードを追加
34
{{{
35 3 Yuumi Yoshida
#!html
36
<pre class="wiki">&lt;h1&gt;Listing todos&lt;/h1&gt;
37 1 Yuumi Yoshida
38 3 Yuumi Yoshida
&lt;table&gt;
39
  &lt;tr&gt;
40
    &lt;th&gt;Due&lt;/th&gt;
41
    <font color="red">&lt;th&gt;Name&lt;/th&gt;</font>
42
    &lt;th&gt;Task&lt;/th&gt;
43
  &lt;/tr&gt;
44 1 Yuumi Yoshida
45 3 Yuumi Yoshida
&lt;%25 for todo in @todos %25&gt;
46
  &lt;tr&gt;
47
    &lt;td&gt;&lt;%25=h todo.due %25&gt;&lt;/td&gt;
48
    <font color="red">&lt;td&gt;&lt;%25=h todo.user.name %25&gt;&lt;/td&gt;</font>
49
    &lt;td&gt;&lt;%25=h todo.task %25&gt;&lt;/td&gt;
50
    &lt;td&gt;&lt;%25= link_to 'Show', todo %25&gt;&lt;/td&gt;
51
    &lt;td&gt;&lt;%25= link_to 'Edit', edit_todo_path(todo) %25&gt;&lt;/td&gt;
52
    &lt;td&gt;&lt;%25= link_to 'Destroy', todo, :confirm =&gt; 'Are you sure?', :method =&gt; :delete %25&gt;&lt;/td&gt;
53
  &lt;/tr&gt;
54
&lt;%25 end %25&gt;
55
&lt;/table&gt;
56 1 Yuumi Yoshida
57 3 Yuumi Yoshida
&lt;br /&gt;
58 1 Yuumi Yoshida
59 3 Yuumi Yoshida
&lt;%25= link_to 'New todo', new_todo_path %25&gt;
60
</pre>
61 1 Yuumi Yoshida
}}}
62
63
=== 4. app/views/todos/show.html.erb ===
64
user.nameカラム表示用のコードを追加
65
{{{
66 3 Yuumi Yoshida
#!html
67
<pre class="wiki">&lt;p&gt;
68
  &lt;b&gt;Due:&lt;/b&gt;
69
  &lt;%25=h @todo.due %25&gt;
70
&lt;/p&gt;
71 1 Yuumi Yoshida
72 3 Yuumi Yoshida
&lt;p&gt;
73
  &lt;b&gt;Task:&lt;/b&gt;
74
  &lt;%25=h @todo.task %25&gt;
75
&lt;/p&gt;
76 1 Yuumi Yoshida
77 3 Yuumi Yoshida
<font color="red">&lt;p&gt;
78
  &lt;b&gt;Name:&lt;/b&gt;
79
  &lt;%25=h @todo.user.name %25&gt;
80
&lt;/p&gt;</font>
81 1 Yuumi Yoshida
82 3 Yuumi Yoshida
&lt;p&gt;
83
  &lt;b&gt;Memo:&lt;/b&gt;&lt;br/&gt;
84
  &lt;%25=new_line(h(@todo.memo)) %25&gt;
85
&lt;/p&gt;
86 1 Yuumi Yoshida
87
88 3 Yuumi Yoshida
&lt;%25= link_to 'Edit', edit_todo_path(@todo) %25&gt; |
89
&lt;%25= link_to 'Back', todos_path %25&gt;
90
</pre>
91 1 Yuumi Yoshida
}}}
92
93
=== 5. app/views/todos/edit.html.erb ===
94
user.name入力表示用のコードを追加
95
{{{
96 3 Yuumi Yoshida
#!html
97
<pre class="wiki">&lt;h1&gt;Editing todo&lt;/h1&gt;
98 1 Yuumi Yoshida
99 3 Yuumi Yoshida
&lt;%25= error_messages_for :todo %25&gt;
100 1 Yuumi Yoshida
101 3 Yuumi Yoshida
&lt;%25 form_for(@todo) do |f| %25&gt;
102
  &lt;p&gt;
103
    &lt;b&gt;Due&lt;/b&gt;&lt;br /&gt;
104
    &lt;%25= f.date_select :due %25&gt;
105
  &lt;/p&gt;
106 1 Yuumi Yoshida
107 3 Yuumi Yoshida
  &lt;p&gt;
108
    &lt;b&gt;Task&lt;/b&gt;&lt;br /&gt;
109
    &lt;%25= f.text_field :task %25&gt;
110
  &lt;/p&gt;
111 1 Yuumi Yoshida
112 3 Yuumi Yoshida
  <font color="red">&lt;p&gt;
113
    &lt;b&gt;Name&lt;/b&gt;&lt;br /&gt;
114
    &lt;%25= f.select :user_id, User.find(:all).collect {|u| [ u.name, u.id ] } %25&gt;
115
  &lt;/p&gt;</font>
116 1 Yuumi Yoshida
117 3 Yuumi Yoshida
  &lt;p&gt;
118
    &lt;b&gt;Memo&lt;/b&gt;&lt;br /&gt;
119
    &lt;%25= f.text_area :memo %25&gt;
120
  &lt;/p&gt;
121 1 Yuumi Yoshida
122 3 Yuumi Yoshida
  &lt;p&gt;
123
    &lt;%25= f.submit "Update" %25&gt;
124
  &lt;/p&gt;
125
&lt;%25 end %25&gt;
126 1 Yuumi Yoshida
127 3 Yuumi Yoshida
&lt;%25= link_to 'Show', @todo %25&gt; |
128
&lt;%25= link_to 'Back', todos_path %25&gt;
129
</pre>
130 1 Yuumi Yoshida
}}}
131
132
=== 6. app/views/todos/new.html.erb ===
133
user.name入力表示用のコードを追加
134
{{{
135 3 Yuumi Yoshida
#!html
136
<pre class="wiki">&lt;h1&gt;New todo&lt;/h1&gt;
137 1 Yuumi Yoshida
138 3 Yuumi Yoshida
&lt;%25= error_messages_for :todo %25&gt;
139 1 Yuumi Yoshida
140 3 Yuumi Yoshida
&lt;%25 form_for(@todo) do |f| %25&gt;
141
  &lt;p&gt;
142
    &lt;b&gt;Due&lt;/b&gt;&lt;br /&gt;
143
    &lt;%25= f.date_select :due %25&gt;
144
  &lt;/p&gt;
145 1 Yuumi Yoshida
146 3 Yuumi Yoshida
  &lt;p&gt;
147
    &lt;b&gt;Task&lt;/b&gt;&lt;br /&gt;
148
    &lt;%25= f.text_field :task %25&gt;
149
  &lt;/p&gt;
150 1 Yuumi Yoshida
151 3 Yuumi Yoshida
  <font color="red">&lt;p&gt;
152
    &lt;b&gt;Name&lt;/b&gt;&lt;br /&gt;
153
    &lt;%25= f.select :user_id, User.find(:all).collect {|u| [ u.name, u.id ] } %25&gt;
154
  &lt;/p&gt;</font>
155 1 Yuumi Yoshida
156 3 Yuumi Yoshida
   &lt;p&gt;
157
    &lt;b&gt;Memo&lt;/b&gt;&lt;br /&gt;
158
    &lt;%25= f.text_area :memo %25&gt;
159
  &lt;/p&gt;
160 1 Yuumi Yoshida
161 3 Yuumi Yoshida
 &lt;p&gt;
162
    &lt;%25= f.submit "Create" %25&gt;
163
  &lt;/p&gt;
164
&lt;%25 end %25&gt;
165 1 Yuumi Yoshida
166 3 Yuumi Yoshida
&lt;%25= link_to 'Back', todos_path %25&gt;
167
</pre>
168 1 Yuumi Yoshida
}}}
169 4 Yuumi Yoshida
170
== ソースコード  ==
171
172
 解答例のソースコードは http://www.ey-office.com/trac/rails/browser/tags/todo_q3で参照できます。