ご協力いただきありがとうございます。以下に説明する未定義のメソッドエラーが発生する理由を理解しようとしています。Ruby on Rails は初めてですが、@waypoint を作成することで、そのメソッド (@waypoint.waypointaddress など) を呼び出せると思いました。私のモデルは、belongs_to を使用しており、多数あります (Newsavedmaps は多くのウェイポイントを持つことができます)。
エラー if !@waypoint.waypointaddress.nil? を参照
NoMethodError (undefined method `waypointaddress' for #<Array:NUMBERSHERE>):
app/controllers/maptry_controller.rb:33:in `index'
マップリーコントローラー
@newsavedmap = Newsavedmap.find(:first, :conditions => {:id => params[:newsavedmap_id]})
@waypoint = Waypoint.find(:all, :conditions => {:newsavedmap_id => params[:newsavedmap_id]})
@newsavedmap.id = params[:newsavedmap_id]
@newsavedmap.name = Newsavedmap.find(:first, :conditions => {:id => params[:newsavedmap_id]}).name
@newsavedmap.optimize = Newsavedmap.find(:first, :conditions => {:id => params[:newsavedmap_id]}).optimize
if !@newsavedmap.start_masterlocation_id.nil?
@start_i_name = Masterlocation.find(:first, :conditions => {:id => @newsavedmap.start_masterlocation_id}).i_name
end
if !@waypoint.waypointaddress.nil?
@waypoint_i_name = Masterlocation.find(:first, :conditions => {:id => @waypoint.waypoint_masterlocation_id}).i_name
end
if !@newsavedmap.end_masterlocation_id.nil?
@end_i_name = Masterlocation.find(:first, :conditions => {:id => @newsavedmap.end_masterlocation_id}).i_name
end
else
@newsavedmap = Newsavedmap.new
end
編集1
これは、Mu のコメントのコードを使用して更新したコントローラーです。ただし、以下に含まれる maptry.html.erb ビューで「undefined method `each'」というエラーが発生します。
明確にするために、条件に一致する 1 つ以上のウェイポイントが存在する場合があります。それらをすべて返してからfor each
、maptry ビューで実行したいと思います。
また、 は.where(...)
に対して未定義のメソッド エラーをスローしたwhere
ので、 を使用しfind
ました。多分それは問題に関連していますか?私はRails 2.Xにいます。
maptry.html.erb からのコード
<% if params[:newsavedmap_id] %>
<% for waypoint in @waypoint %>
<option selected value="<%= @waypoint.waypointaddress %>"><%= @waypoint_inst_name %></option>
<% end %>
<% end %>
更新された maptry コントローラー
if params[:newsavedmap_id]
@newsavedmap = Newsavedmap.find(:first, :conditions => {:id => params[:newsavedmap_id]})
@waypoint = Waypoint.find(:first, :conditions => {:newsavedmap_id => params[:newsavedmap_id]})
@waypoint.waypointaddress = Waypoint.find(:first, :conditions => {:newsavedmap_id => params[:newsavedmap_id]}).waypointaddress
@waypoint.waypoint_masterlocation_id = Waypoint.find(:first, :conditions => {:newsavedmap_id => params[:newsavedmap_id]}).waypoint_masterlocation_id
@waypoint_inst_name = Masterlocation.find(:first, :conditions => {:id => @waypoint.waypoint_masterlocation_id}).inst_name
@newsavedmap.id = params[:newsavedmap_id]
@newsavedmap.name = Newsavedmap.find(:first, :conditions => {:id => params[:newsavedmap_id]}).name
@newsavedmap.optimize = Newsavedmap.find(:first, :conditions => {:id => params[:newsavedmap_id]}).optimize
if !@newsavedmap.start_masterlocation_id.nil?
@start_inst_name = Masterlocation.find(:first, :conditions => {:id => @newsavedmap.start_masterlocation_id}).inst_name
end
if !@newsavedmap.end_masterlocation_id.nil?
@end_inst_name = Masterlocation.find(:first, :conditions => {:id => @newsavedmap.end_masterlocation_id}).inst_name
end
else
@newsavedmap = Newsavedmap.new
end