2013-07-15 2 views
0

모든 발전기의 결과를 얻으 려하고 결과를 1 개의 테이블로 병합하려고합니다. belongs_to 결과 결과 :ID가없는 생성기를 찾을 수 없습니다.

발전기 has_many : 나는 다음과 같은 관계가 발전기

나는 새로운 결과를 생성 할 때마다

을, 나는 ID없이 발전기를 찾을 수 없다는 오류가 발생했습니다. 왜 오류가 발생합니까? 어떻게 해결해야합니까?

예 : localhost : 3000/generators/new =은 생성기 양식에 값을 입력하고 생성 버튼을 클릭하면 localhost : 3000/generators/8/results/new로 이동합니다. . 이 양식에 대한 값을 입력 한 후에 여기에 ID없이 Generator를 찾을 수 없다는 오류 메시지가 표시됩니다. 나는 Generators + Result 값을 함께 표시 할 수있는 페이지를 만들려고합니다. 모든 발전기와 각 결과 데이터를 1 페이지에 표시하십시오.

GeneratorController

class GeneratorsController < ApplicationController 
    before_action :set_generator, only: [:show, :edit, :update, :destroy] 
    # GET /generators 
    # GET /generators.json 
    def index 
    @generators = Generator.all(:include => [:results]) 
    end 

    # GET /generators/1 
    # GET /generators/1.json 
    def show 
    end 

    # GET /generators/new 
    def new 
    @generator = Generator.new 
    end 

    # GET /generators/1/edit 
    def edit 
    end 

    # POST /generators 
    # POST /generators.json 
    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 

    # PATCH/PUT /generators/1 
    # PATCH/PUT /generators/1.json 
    def update 
    respond_to do |format| 
     if @generator.update(generator_params) 
     format.html { redirect_to @generator, notice: 'Generator was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: 'edit' } 
     format.json { render json: @generator.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /generators/1 
    # DELETE /generators/1.json 
    def destroy 
    @generator.destroy 
    respond_to do |format| 
     format.html { redirect_to generators_url } 
     format.json { head :no_content } 
    end 
    end 

    private 
    def set_generator 
     @generator = Generator.find(params[:id]) 
    end 

    def generator_params 
     params.require(:generator).permit(:primer_length,:choice,:random_primer_generated,:no_A,:no_T,:no_G,:no_C,:user_seq) 
    end 
end 

Result.rb

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 

ResultController [오류 DEF 생성의 행에서 강조되고; 발전기 = Generator.find (PARAMS [: ID]) 발생이 많은 결과가있는 경우]

class ResultsController < ApplicationController 
    before_action :set_result, only: [:show, :edit, :update, :destroy] 
    # GET /results 
    # GET /results.json 
    def index 
    @results = Result.all 
    end 

    # GET /results/1 
    # GET /results/1.json 
    def show 
    end 

    # GET /results/new 
    def new 
    @result = Result.new 
    end 

    # GET /results/1/edit 
    def edit 
    end 

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

    # generator = Generator.find(3) 
    # @result = generator.results.build(result_params) 
    # @[email protected]_result(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 

    # PATCH/PUT /results/1 
    # PATCH/PUT /results/1.json 
    def update 
    respond_to do |format| 
     if @result.update(result_params) 
     format.html { redirect_to @result, notice: 'Result was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: 'edit' } 
     format.json { render json: @result.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /results/1 
    # DELETE /results/1.json 
    def destroy 
    @result.destroy 
    respond_to do |format| 
     format.html { redirect_to results_url } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_result 
     @result = Result.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def result_params 
     params.require(:result).permit(:ncbi_ref_seq) 
    end 
end 

생성기/index.html.erb은

<h1>[Index]Random Amplified Polymorphic DNA [RAPD] Primer Generator</h1> 
<table> 
    <thead> 
    <tr> 
     <th>Primer length</th> 
     <th>Selected choice</th> 
     <th>Random primer generated</th> 
     <th>Complimentary primer</th> 
     <th>NCBI ref seq</th> 
     <th>Genome sample</th> 
     <th>Binding times</th> 
    </tr> 
    </thead> 

    <tbody> 
    <% @generators.each do |generator| %> 
    <tr> 
     <td><%= generator.primer_length %></td> 
     <td><%= generator.choice %></td> 
     <td><%= generator.random_primer_generated %></td> 
     <td><%= generator.c_primer %></td> 

     <% for result in generator.results %> 
     <td><%= result.ncbi_ref_seq %></td> 
     <td><%= result.genome_sample %></td> 
     <td><%= result.binding_times %></td> 
     <%end%> 

     <td><%= link_to 'Show', generator %></td> 
     <td><%= link_to 'Edit', edit_generator_path(generator) %></td> 
     <td><%= link_to 'Destroy', generator, method: :delete, data: { confirm: 'Are you sure?' } %></td> 
    </tr> 
    <% end %> 
    </tbody> 
</table> 

<br> 

<%= link_to 'Home', root_path %> 
<%= link_to 'New Generator', new_generator_path %> 

답변

0

, 먼저보다 당신은 새로운 방법에 발전기를 찾아야한다 왜냐하면 어떤 레코드를 만들면 새로운 메소드에서 초기화되기 때문입니다. 새로운 것을 다시 작성하고 메소드를 작성하면 참조를 가져올 수 있습니다.

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

# POST /results 
# POST /results.json 
def create  
    @result = @result.generate_result(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

안녕하세요, UR 단계를 수행했지만 여전히 오류가 발생합니다. ID없이 Generator를 찾을 수 없습니다. 아래는 내 코드입니다. 'def new generator = Generator.find (params [: generator]) @result = generator.results.build (result_params)end' – BC2

관련 문제