2011-08-18 7 views
1

세 테이블 모두 하나의 테이블에 합류했습니다. 여기에 코드입니다 :ID가없는 조인 테이블에 액세스하려고 시도했습니다.

class App < ActiveRecord::Base 
    has_many :app_servers 
    has_many :servers, :through => :app_servers 
    has_many :environments, :through => :app_servers 
end 

class Server < ActiveRecord::Base 
    has_many :app_servers 
    has_many :apps, :through => :app_servers 
    has_many :environments, :through => :app_servers 
end 

class Environment < ActiveRecord::Base 
    has_many :app_servers 
    has_many :apps, :through => :app_servers 
    has_many :servers, :through => :app_servers 
end 

class AppServer < ActiveRecord::Base 
    belongs_to :app 
    belongs_to :server 
    belongs_to :environment 
end 

이미 앱을위한 발판 및 서버 모델을 사용했습니다 및 액세스 할 수 있습니다,하지만 내가 AppServer를위한 발판을 생성하고 인덱스 페이지에 액세스하려고 할 때, 그것은 나에게 오류를 제공합니다 :

No route matches {:action=>"show", :controller=>"app_servers", :id=>#<AppServer app_id: 3, server_id: 1, environment_id: 2>}

는 제가 애플리케이션 서버 테이블을 만들 때, 나는 :id => false 것을 지정했기 때문에 오류의 이유는 믿습니다.

그래서 지금하고있는 일은 만들고있는 페이지를 만드는 것입니다. 그러면 현재 저장된 응용 프로그램과 현재 저장된 서버를 특정 환경에 매핑 할 수 있습니다. 이 문제를 어떻게 극복 할 수있는 아이디어가 있습니까?

또한 원래 내 모델이 has_and_belongs_to_many 모델 이었기 때문에 ID가없는 조인 모델에 문제가 있습니까? 또한

<h1>Listing app_servers</h1> 

<table> 
    <tr> 
    <th></th> 
    <th></th> 
    <th></th> 
    </tr> 

<% @app_servers.each do |app_server| %> 
    <tr> 
<td><%= app_server%></td> 
    <td><%= link_to 'Show', app_server %></td> 
    <td><%= link_to 'Edit', edit_app_server_path(app_server) %></td> 
<td><%= link_to 'Destroy', app_server, :confirm => 'Are you sure?', :method => :delete %></td> 
    </tr> 
<% end %> 
</table> 

<br /> 

<%= link_to 'New App server', new_app_server_path %> 

그리고 app_servers_controller.rb 파일 :

class AppServersController < ApplicationController 
    # GET /app_servers 
    # GET /app_servers.xml 
    def index 
    @app_servers =AppServer.all 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @app_servers } 
    end 
    end 

    # GET /app_servers/1 
    # GET /app_servers/1.xml 
    def show 
    @app_server = AppServer.find(params[:id]) 

    respond_to do |format| 
     format.html # show.html.erb 
     format.xml { render :xml => @app_server } 
    end 
    end 

    # GET /app_servers/new 
    # GET /app_servers/new.xml 
    def new 
    @app_server = AppServer.new 

    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @app_server } 
    end 
    end 

    # GET /app_servers/1/edit 
    def edit 
    @app_server = AppServer.find(params[:id]) 
    end 

    # POST /app_servers 
    # POST /app_servers.xml 
    def create 
    @app_server = AppServer.new(params[:app_server]) 

    respond_to do |format| 
     if @app_server.save 
     format.html { redirect_to(@app_server, :notice => 'App server was successfully  created.') } 
     format.xml { render :xml => @app_server, :status => :created, :location =>  @app_server } 
     else 
    format.html { render :action => "new" } 
     format.xml { render :xml => @app_server.errors, :status =>  :unprocessable_entity } 
     end 
    end 
    end 

    # PUT /app_servers/1 
    # PUT /app_servers/1.xml 
    def update 
    @app_server = AppServer.find(params[:id]) 

    respond_to do |format| 
     if @app_server.update_attributes(params[:app_server]) 
     format.html { redirect_to(@app_server, :notice => 'App server was successfully updated.') } 
     format.xml { head :ok } 
     else 
     format.html { render :action => "edit" } 
     format.xml { render :xml => @app_server.errors, :status => :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /app_servers/1 
    # DELETE /app_servers/1.xml 
    def destroy 
    @app_server = AppServer.find(params[:id]) 
    @app_server.destroy 

    respond_to do |format| 
     format.html { redirect_to(app_servers_url) } 
     format.xml { head :ok } 
    end 
    end 
end 
+0

이보기 코드를 보여 그 오류를 일으킬 – fl00r

+0

@ fl00r 어떤보기 코드? 'index.html.erb' 파일 또는'app_servers_controller.rb' 파일? – omarArroum

+0

'인덱스 페이지에 액세스하려고 시도한 결과,이 오류'인덱스 – fl00r

답변

1

확인 미리

여기에 편집에서

덕분에 index.html.erb 파일입니다. 여기서 가장 간단한 해결책은 id을 돌려 보내는 것입니다. 또는 당신은

get '/app_servers/show', :to => "app_servers#show", :as => :app_server 

같은 일부의 standart 경로를 재 작성하고 컨트롤러에서 id 페칭 제거해야합니다.

는 내 말은 - 리턴 다시 IDS - 즉 여기 easiear

UPD

신속하고 더러운 솔루션입니다 AppServer 모델이 작은 방법을 추가하는 것입니다

def to_param 
    "#{environment_it}_#{app_id}_#{server_id}" 
end 
+0

이 표시되므로 routes.rb를 변경하여 표시 한 변경 사항을 반영하길 원하십니까? 그런 다음 결과를 어떻게 반환할까요? App_Servers 테이블에있는 유일한 필드는 environment_it, app_id 및 server_id입니다. – omarArroum

+0

@teenOmar, 내 업데이트를 확인하십시오 – fl00r

+0

'environment_it'과 반대로'environment_id'를 사용했다고 가정 해 봅니다. 그래서 지금 이걸 가지고 있다면 어떻게해야합니까? – omarArroum

관련 문제