2016-04-11 8 views
0

私のバディーがショーで呼び出すためにコーディングしたことを理解しようとしました#いくつかのインスタンス変数を表示します。彼のコードを理解し、メソッドhirahana_valueを呼び出すのに問題があります。未定義のメソッド 'hirahana_value' for nil:NilClass

ここに私のコントローラ

class SymbolesController < ApplicationController 
    before_action :set_symbole, only: [:show, :edit, :update, :destroy, :load_form, :load_attributes_form] 


    def index 
    @symboles = Symbole.all 
    end 

    def show 
    end 

    def new 
    @symbole = Symbole.new 
    end 

    def edit 
    end 

    def create 
    @symbole = Symbole.new() 
    if symbole_params[:symbole_type].present? 
     @symbole.build_kanji_attribute if symbole_params[:symbole_type] == "kanji" 
     @symbole.build_hiragana_and_katagana_attribute if symbole_params[:symbole_type] == "hiragana_and_katagana" 
    end 
    @symbole.assign_attributes(symbole_params) 

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

    def update 
    respond_to do |format| 
     if @symbole.update(symbole_params) 
     format.html { redirect_to @symbole, notice: 'Symbole was successfully updated.' } 
     format.json { render :show, status: :ok, location: @symbole } 
     else 
     format.html { render :edit } 
     format.json { render json: @symbole.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    def destroy 
    @symbole.destroy 
    respond_to do |format| 
     format.html { redirect_to symboles_url, notice: 'Symbole was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    def load_form 
    @symbole = Symbole.new if @symbole.nil? 
    if params[:form_name].present? 
     respond_to do |format| 
     format.js { render "ajax_form_"+params[:form_name] } 
     end 
    end 
    end 
    def load_attributes_form 
    @symbole = Symbole.new if @symbole.nil? 
    if params[:form_name].present? 
     respond_to do |format| 
     format.js { render "ajax_form_"+params[:form_name] } 
     end 
    end 
    end 


    private 

    def set_symbole 
     if params[:id].present? 
     @symbole = Symbole.find(params[:id]) 
     else 
     @symbole = Symbole.new 
     end 
    end 

    def symbole_params 
     params.require(:symbole).permit(:lang, :example_fr, :symbole_type, :css_class, kanji_attribute_attributes: [:value,:concept, :fr], 
                        hiragana_and_katagana_attribute_attributes: [:hirahana_value,:katagana_value, :fr] 
                        ) 
    end 
end 

そして、ここでは、ここで私のオブジェクト

<%= simple_form_for @symbole, :defaults => {:required => true} do |f| %> 
    <%= f.error_notification %> 

    <div class="form-inputs"> 
    <%= f.hidden_field :lang, value: "Japonais"%> 
    <%= f.select :symbole_type, options_for_select([["Kanji", "kanji"], ["Hiragana/Katagana", "hiragana_and_katagana"]]) , {:prompt => "Type de symbole", selected: @symbole.symbole_type}, {required: true} %> 
    <div id="specific_attributes"> 
    </div> 
    <%= f.input :example_fr, placeholder: "Exemple", label: "Exemple" %> 
    <%= f.input :css_class, placeholder: "Nom de la classe css" , label: "Classe"%> 

    </div> 

    <div class="form-actions"> 
    <%= f.button :submit, "Valider" %> 
    </div> 
<% end %> 

を作成するための新しい#ビューですが、ショー#図であり、私はちょうど

<ul class="list-inline text-center card-frame"> 
      <li> 
      <div class="card"> 
       <div class="front"> 
       <!-- PARAMETRER LE RESPONSIVE BOOTSTRAP --> 
        <!-- <div class="col-sm- col-xs-4 col-md-3"> --> 


       <div class="card-hiragana hiragana-<%[email protected]_and_katagana_attributes.hirahana_value.downcase.last%>"> 
        <h1><b><%= @hiragana_and_katagana_attributes.hirahana_value %></b></h1> 
       </div> 
       <div class="card-katakana"> 
        <p><%= @hiragana_and_katagana_attributes.hirahana_value %></p> 
       </div> 
       <!-- </div> --> 
       </div> 
       <div class="back"> 
       <div class="col-sm-3 col-xs-4 col-md-3 containerbackcards-<%[email protected]_and_katagana_attributes.hirahana_value.downcase.last%>"> 
        <div class="backcard-hiragana"> 
         <h1><b><%= @hiragana_and_katagana_attributes.hirahana_value %></b></h1> 
        </div> 
        <div class="card-bigletter"> 
         <p><%= @hiragana_and_katagana_attributes.hirahana_value %></p> 
        </div> 
       </div> 
       </div> 
      </div> 
      </li> 
     </ul> 

     <div class="text-center buttons-view-post"> 
      <% if current_user.try(:admin?) %> 
      <%= link_to "Modifier l'hiragana", edit_hiragana_path(@hiragana), class: "btn btn-default btn-md" %> 
      <% end %> 
      <%= link_to "Voir tous les hiraganas", hiraganas_path, class: "btn btn-default btn-md" %> 
     </div> 
     </div> 
    </div> 
    </div> 
</div> 
を呼び出したいです
+0

hirahana_valueのようなものはありません。正しいのは、日本語の音節アルファベットを参照して、hiragana_valueです。この文字列を検索し、それをhiragana_valueに置き換えてください。すべてがOKです。 –

+1

@EddeAlmeidaはい、ありがとうございました。 –

答えて

0

コントローラーインスタンス変数@hiragana_and_katagana_attributesに#sのコンテキスト内で値が指定されていませんどのように行動するか、少なくともすぐに見える方法ではありません。このオブジェクトがインスタンス化されることを期待しているところでは、それは起こっていません。

+0

なぜ動作しないのか教えていただけますか? –

+0

ルビでは、インスタンス変数(通常は@で始まる変数、この場合は@ hiragana_and_katagana_attributes)を参照すると、値が与えられていないときはnilが返されます。 @ hiragana_and_katagana_attributesがSymboleオブジェクトであると期待しており、#hirahana_valueメソッドを呼び出そうとしています。代わりに、値を決して設定しないので、あなたはそのメソッドをnilで呼び出すことになり、そのメソッドはありません。 –

関連する問題