0

나는 당신의 집단적 지혜를 찾으러 왔습니다.ActiveResource를 사용하여 다른 응용 프로그램의 데이터베이스 조작

내 목표 개요 : 다양한 클라이언트의 컴퓨터를보다 잘 관리하기 위해 퍼핏의 Dashboard을 확장하려고합니다. 그것은 Rails 2 응용 프로그램이며 필자가 작성중인 Rails 3 응용 프로그램으로 확장하려고합니다. Dashboard를 필요한만큼 완벽하게 만들지 못하는 몇 가지 문제가 있지만 해결책은 간단합니다. 저는이 질문에 대한 답이 나머지를 이해하는 데 도움이 될 것이라고 생각하기 때문에 하나에 집중할 것입니다. 저는 대시 보드 코드를 전혀 변경하지 않는 솔루션을 찾고있었습니다. 왜냐하면 저는 관리자가 아니기 때문에 미래의 혼란을 피고 싶지 않습니다.

나는 이것을 가장 잘하는 방법에 대해 많이 생각했습니다. 데이터베이스에 직접 연결하는 방법에 대해 생각했지만 인터넷 검색을 수행 한 후 콜드 피트가 발생했습니다. 두 번째 데이터베이스 연결을 설정하는 것이 그렇게 어렵지는 않은 것처럼 보입니다. 내가 좋아하지 않는 것은 실행되는 동안 다른 응용 프로그램의 데이터베이스를 변경하는 것입니다. 미신에 근거하여 내가 합리적으로 합리적인 선택을한다면 뭔가를 말하십시오.

몇 가지 아이디어가 있었지만 마침내 시작하여 거의 성공하지 못했지만 REST를 통해 Dashboard의 데이터베이스에 액세스했습니다. 그것은 내장되어있어 왜 사용하지 않습니까? 글쎄, 나는 두개의 표를 조작 할 수 있었지만, 내가 원했던 표는 조작 할 수 없었다. 따라서이 상황에서 세 가지 테이블을 알고 있어야합니다.

  1. 노드 (기본적으로 컴퓨터)
  2. node_groups
  3. node_group_memberships (서로 1과 2에 관한 조인 테이블)

내가 추가 할 수 있습니다 (당신이 컴퓨터를 넣을 수있는 그룹) 두 노드와 node_groups를 모두 제거해야하지만 둘 사이의 연결을 만들 수 있기를 원합니다. 새 사용자를 만들려면, 나는 ActiveResource 모델은 다음과 같습니다 그 설정이 있습니다

class PuppetNode < ActiveResource::Base                                      
self.site = "http://127.0.0.1:4000/"               
self.element_name = "node"                 
attr_accessor :grouped   
end                        

나는 새로운 노드를 만들거나 콘솔을 통해 노드 테이블에서 정보를 잡아 다음 무료입니다.

PuppetNode.create(:column_name => "and so on") 

같은이 node_groups 간다, 나는 심지어 node_group_memberships 위해 밖으로 가발하지 않는 레일 3 모델을 만들 수 있습니다,하지만 난 그 테이블에서 아무것도 만들 수 없습니다 : 그것은 다음과 같이 보일 수 있습니다. 나는 (인형 연구소에서 좋은 사람들 이상으로) 레일 2 node_group_membership 컨트롤러를 보면 나는 그것이 내가 만들려고 할 때마다 밖으로 초크 그러나 어떤 이유로 든 방법을

class NodeGroupMembershipsController < InheritedResources::Base 
    respond_to :json 
    before_filter :raise_if_enable_read_only_mode, :only => [:new, :edit, :create, :update, :destroy] 
    before_filter :standardize_post_data, :only => [:create] 

    def create 
    create! do |success, failure| 
     success.json { render :text => @node_group_membership.to_json, :content_type => 'application/json', :status => 201 } 
     failure.json { render :text => {}.to_json, :content_type => 'application/json', :status => 422 } 
    end 
    end 

    # we want: {node_group_membership => {node_id => <id>, node_group_id => <id>} 
    # allow and convert: {node_name => <name>, group_name => <name>} 
    def standardize_post_data 
    unless params[:node_group_membership] 
     params[:node_group_membership] = {} 
     node = Node.find_by_name(params[:node_name]) 
     group = NodeGroup.find_by_name(params[:group_name]) 
     params[:node_group_membership][:node_id] = (node && node.id) 
     params[:node_group_membership][:node_group_id] = (group && group.id) 
    end 
    end 
end 

을 만들 수 있다는 것을 볼 수 있습니다 이

irb(main):005:0> PuppetNodeGroupMembership.create(:node_id => 20, :node_group_id => 5) 
=> #<PuppetNodeGroupMembership:0x007fb3150af878 @attributes={"node_id"=>20, "node_group_id"=>5}, @prefix_options={}, @persisted=false, @remote_errors=#<ActiveResource::ResourceInvalid: Failed. Response code = 422. Response message = .>, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007fb3150af4e0 @base=#<PuppetNodeGroupMembership:0x007fb3150af878 ...>, @messages={}>> 

어떤 조언을 같은과의 연관이 많이 주시면 감사하겠습니다, 나는 이미 그것을 알아 내려고 노력으로 고체 8 비참한 시간을 넣었습니다. 감사!

답변

관련 문제