プロジェクト

全般

プロフィール

ScaffoldPlusAnswerThree » 履歴 » バージョン 6

Yuumi Yoshida, 2008-01-13 18:00

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