2013-07-15 63 views
0

我有2個表,發生器和結果。我如何鏈接2個表格的數據?

發電機的has_many導致 結果belongs_to的發電機

我怎麼能有一個頁面,其中我可以顯示發電機和結果的所有值?在我的結果控制器創建必須我鏈接Generator_id?我試過了,但是當我嘗試創建屬於該生成器的新結果時,它給了我一個錯誤。

例如本地主機:3000 /發電機/ 3 /結果/新,單擊創建後,它給了我下面的錯誤:

Couldn't find Generator without an ID .

我已經收到了一些建議,要我創建一個新的控制器這樣做。如果是這樣,我應該如何將我的@generator和@result傳遞給它?

GeneratorController

def index 
    @generators = Generator.all(:include => [:results]) 
    end 

def create  
    @generator = Generator.new(generator_params) 
    @generator.choice = params[:choice] 
     if params[:choice] == 'Randomly' 
      @generator.random_generate(generator_params) 
     elsif params[:choice] == 'No_of_ATGC' 
      @generator.no_ATGC(params[:no_A],params[:no_T],params[:no_G],params[:no_C]) 
     elsif params[:choice] == 'Seating' 
      @generator.seating(params[:user_seq]) 
     end 

    @generator.result_choice=params[:result_choice] 
    respond_to do |format| 
     if @generator.save 
      if @generator.result_choice == 'Yes' 
      format.html { redirect_to(new_generator_result_path(@generator)) } 
      else 
      format.html { redirect_to @generator, notice: 'Result was successfully created.' } 
      format.json { render action: 'show', status: :created, location: @generator } 
      end 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @generator.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

結果模型

class Result < ActiveRecord::Base 
    attr_accessible :ncbi_ref_seq,:genome_seq, :genome_sample 
    belongs_to :generator, foreign_key: "generator_id" 

    def generate_result(result_params) 
    ref_seq = self.ncbi_ref_seq 
    Bio::NCBI.default_email = "[email protected]" 
    fasta_sequence = Bio::NCBI::REST::EFetch.nucleotide(ref_seq,"fasta") 
    fasta=Bio::FastaFormat.new(fasta_sequence) 
    self.genome_seq = fasta.data 
    self.genome_sample = fasta.definition  

    g=Generator.last 
    p=self.genome_seq.scan(g.c_primer) 
    self.binding_times= p.length()  
    end 

end 

ResultContorller

def index 
    @results = Result.all(:include => :generator) 
    end 

def create 
    @result = Result.new 
    @result = @result.generate_result(result_params) 
    @generator = Generator.find(params[:id]) 
    @result = generator.results.build(result_params) 

    respond_to do |format| 
     if @result.save 
     format.html { redirect_to @result, notice: 'Result was successfully created.' } 
     format.json { render action: 'show', status: :created, location: @result } 
     else 
     format.html { render action: 'new' } 
     format.json { render json: @result.errors, status: :unprocessable_entity } 
     end 
    end 
    end 
+0

親切,你可以粘貼你的模型和控制器的一些代碼..問題似乎在你的控制器..和在哪裏做你想顯示這些數據? –

+0

我貼了它。我想以生成器索引形式顯示這些數據,我可以顯示所有的生成器值和屬於該生成器的所有結果。 – BC2

+0

我有點困惑......看起來你並不完全遵循「Rails方式」的做法。你不應該在你的生成器窗體上顯示* all *生成器的值。所有生成器的值應該放在索引頁上。 – aardvarkk

回答

0

我只想在這樣的控制器創建一個變量:

@generators = Generator.all 
在你看來

則...

<% @generators.each do |g| %> 
    <% g.results.each do |r| %> 
    <% debug r %> 
    <% end %> 
<% end %> 

這聽起來像你正在使用,試圖拔出所有發電機的任何代碼是不正確的。

+0

嗨,我試過這種方法。 g.results.ncbi_ref_seq但我得到未定義的方法ncbi_ref_seq。 NCBI_ref_seq是屬於結果的屬性。這是我想要在m頁中顯示的數據之一 – BC2

+0

好吧,'g.results'可能是一個*數組*,而不是一個模型。如果你想展示它的某些部分,你可能必須有另一個循環遍歷你的結果。根據你的回答,我會更新我的答案,但這似乎是另一個問題... – aardvarkk

+0

aardvarkk:結果的值都是空的。但是當我進入locahost:3000 /結果,他們在那裏....我跟着ur方法,但他們沒有顯示在locahost:3000 /發電機 – BC2

0

你試圖實現嵌套資源http://guides.rubyonrails.org/routing.html#nested-resources

您需要修改您的路線是這樣的

resources :generators do 
    resources :results 
    end 

這種方式,你有generator_id,這樣你就可以修改你的控制器代碼的東西像這樣:

generator = Generator.find(params[generator_id]) 
    generator.results.build(result_params) 
+0

我的路線與你所輸入的一樣。但我仍然得到了錯誤消息=(...在我繼續到generator.results.build(result_params)之前,我需要有result_params。我通過在我的模型中定義一些函數來獲取值。 'def create' - '@result = Result.new''@result = @ result.generate_result' – BC2

+0

您的form_for看起來像form_for [@generator,@result] – ovargas27

+0

您的發佈請求在哪裏?post/generators /:generator_id /結果 – ovargas27