0

ご協力いただきありがとうございます。以下に説明する未定義のメソッドエラーが発生する理由を理解しようとしています。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
4

1 に答える 1

3

条件に一致するすべてのウェイポイントを見つけるよう ActiveRecord に依頼しています。

@waypoint = Waypoint.find(:all, :conditions => {:newsavedmap_id => params[:newsavedmap_id]})
#-------------------------^^^^

つまり、配列を取得し@waypoint、配列 (通常) にはメソッドがありませんwaypointaddressおそらく、最初のものを求めるつもりでした:

@waypoint = Waypoint.find(:first, :conditions => {:newsavedmap_id => params[:newsavedmap_id]})

またはそれ以上:

@waypoint = Waypoint.where(:newsavedmap_id => params[:newsavedmap_id]).first

一般に、もうそのように使用するべきではありfindません。通話中に何か:conditionsを入力していることに気付いた場合は、代わりfindに言う必要があります。.where(...)

于 2013-08-17T01:57:03.887 に答える