片平様
わたなべです。
ご回答ありがとうございます。
実は以前のソースでparams[:service][:area_id]で登録できたのですが、
今回の問題は、仕様を追加した後にエラーが発生しました。
現在の仕様はこのようになっております。
【以前】
[View] [Controller]
-------------------------------------------------------
登録画面 regist.rhtml def regist
確認画面 confirm.rhtml def confirm
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
【現在】
[View] [Controller]
-----------------------------------------------------------------
登録画面 regist.rhtml(��-1) def regist(��-2)
バリデートチェック - def get_regist(��-1)
(チェック該当は
��-1にリダイレクト)
確認画面 confirm.rhtml(��-1) def confirm(��-2)
最初はModelクラスにバリデートをつければ事は済むと思ってましたが、
「ライドオンRails」を読み、「validateはsave!を実行してはじめて有効」
と書かれており、データベースに登録していない状態では有効ではないのか
と思い、param変数を一度controllerに渡し、バリデートチェックをかける
という仕様に変えました。
すると、habtmで持っていたAreaでエラーが起こりました。
以下、params[:service][:area_id]にしたときのエラーです。
------エラー内容-------------------------------------------------
undefined method `area_id=' for #<Service:0x3a58798>
RAILS_ROOT: ./script/../config/..
C:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/activerecord-1.14.2/lib/active_record/base.rb:1789:in `method_missing'
C:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/activerecord-1.14.2/lib/active_record/base.rb:1510:in `attributes='
C:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/activerecord-1.14.2/lib/active_record/base.rb:1509:in `attributes='
C:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/activerecord-1.14.2/lib/active_record/base.rb:1354:in `initialize_without_callbacks'
C:/Program Files/ruby-1.8/lib/ruby/gems/1.8/gems/activerecord-1.14.2/lib/active_record/callbacks.rb:236:in `initialize'
#{RAILS_ROOT}/app/controllers/b_account_controller.rb:74:in `get_regist'
Request
Parameters: {"b"=>{"agreement"=>"1"}, "submit"=>"\346\254\241\343\201\270",
"x"=>"17", "y"=>"7", "service"=>{"name_j"=>"sdfsdf", "companyname"=>"sdfsfs",
"between_a"=>"", "between_b"=>"", "tel"=>"sdfds",
"companyaddress"=>"555 Irving, San Francisco, CA", "website"=>"sdfsdf",
"manager"=>"sdfsdfs", "area_id"=>"1", "name_e"=>"sdfsfs", "companytel"=>"sdfds",
"chargerpost"=>"sfsdf", "charger"=>"sdfsdfs", "secretword"=>"sfsd",
"address"=>"555 Irving, San Francisco, CA", "password"=>"aaaaa",
"email"=>"sdfsd", "membertype_id"=>"4", "industry_id"=>"1"},
"password"=>{"confirm_password"=>"aaaaa"},
"select"=>"\343\201\212\346\257\215\343\201\225\343\202\223\343\201\256\346\227\247\345\247\223"}
------------------------------------------------------------------------------------------------
params[:service][:area_id]を
変えることでエラーはなくなるのかなと思い、
params[:service][:area_ids]にすると、
undefined method `area_id='ではなく、
Couldn't find Area without an ID
になったわけです。
片平さんのおっしゃるように、paramsがうまく機能していないのかなと思ってます。
ソース全部を載せると読みづらくなるので、該当箇所のソースを掲載します。
登録画面 regist.rhtml(��-1) def regist(��-2)
バリデートチェック - def get_regist(��-1)
確認画面 confirm.rhtml(��-1) def confirm(��-2)
■��-1
<!--rails start-->
<select id="service_area_id" name="service[area_id]">
<% for area in @area %>
<option value="<%= area.id %>"><%=h area.id %></option>
<% end %>
</select>
<!--rails end-->
■��-2
def regist
@area = Area.find(:all)
〜以下略
■��-1
def get_regist
session[:service] = Service.new(params[:service])
#入力チェック
if params[:service][:name_e] == "" ||
params[:service][:charger] == "" ||
params[:service][:chargerpost] == "" ||
params[:service][:e_mail] == "" ||
params[:service][:password] == "" ||
params[:service][:address] == "" ||
params[:service][:tel] == "" ||
params[:service][:manager] == "" ||
params[:service][:companyname] == "" ||
params[:service][:companytel] == "" ||
params[:service][:website] == ""
if params[:service][:name_e] == ""
flash[:notice_name_e] = "店名(英語)を入力してください"
end
if params[:service][:charger] == ""
flash[:notice_charger] = "担当者を入力してください"
end
〜途中略
redirect_to :action => "regist",:membertype => params[:service][:membertype_id]
return
else
redirect_to :action => "confirm",:membertype => params[:service][:membertype_id]
end
■��-1
<!--rails start-->
<td class="txt12nosp"><%= @area_name %></td>
<input id="service_area_id" name="service[area_ids][]" type="hidden" value=<%= @params["service"]["area_ids"] %> />
<!--rails end-->
■��-2
def confirm
@area_name=Area.find(params[:service][:area_ids]).collect { |area|
area.name }
#@area_name = Area.find(params[:service][:area_ids]).name
#ご教示いただいた方法を試しましたが、Couldn't find Area without an ID
#でエラーが発生しました。やはりparamsの指定方法が間違っているのかなと
#思ってます。
#ソース終了
このような確認画面がある場合でもModelクラスで指定するvalidateが
有効になる方法がございましたら、ご教示願います。
Let's start Yahoo! Auction - Free Campaign Now!