2016-07-16 11 views
0

私のWebアプリケーションでは、public_bundleはhas_manyのカードと、belongs_toのpublic_bundleというカードを持っています。私はこのための関連付けを追加しましたが、新しい公開バンドルを作成しようとすると、public_bundleの未定義のメソッド 'cards'というnothemodエラーが発生します。PublicBundlesControllerのNoMethodError#show

モデル:

class User < ActiveRecord::Base 
    has_secure_password 
    has_many :cards, through: :public_bundles 
    has_many :cards, through: :bundles 
    has_many :bundles 
    has_many :public_bundles 
end 

class PublicBundle < ActiveRecord::Base 
    has_many :cards 
    belongs_to :user 
end 

class Card < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :public_bundle 
    belongs_to :bundle 
end 

コントローラ:

class CardsController < ApplicationController 
def new 
    @card = current_user.public_bundles.cards.new 
end 

def create   
    @card = current_user.public_bundles.cards.new(card_params) 
    if @card.save 
     redirect_to '/' 
    else 
     render @public_bundle 
    end 
end 

private 
def card_params 
    params.require(:card).permit(:name, :description, :image) 
end 

class PublicBundlesController < ApplicationController 

def show 
    @public_bundle = current_user.public_bundles.find(params[:id]) 
    @public_bundle_edit = current_user.public_bundles.find(params[:id]) 
    @card = current_user.public_bundles.cards.new 
    @cards = @public_bundle.cards.all 
end 

private 
def public_bundle_params 
    params.require(:public_bundle).permit(:name) 
end 

ビュー:あなたがそのように新しい@cardインスタンス変数を生成すると

 <div class="new-card"> 

     <%= form_for @card do |x| %> 
      <%= x.text_field :name, :placeholder => " New Card Name", :style => "height:30px; width:530px; border:#ff4d4d solid; margin-top:14px; padding:5px; margin-left:14px; background-color:#eff5f5;" %> 
      <%= x.text_field :image, :placeholder => " New Card Image (Optional)", :style => "height:30px; width:530px; border:#ff4d4d solid; margin-top:14px; padding:5px; margin-left:14px; background-color:#eff5f5;" %>  
      <%= x.text_area :description, :placeholder => " New Card Description", :style => "height:30px; width:530px; border:#ff4d4d solid; margin-top:14px; padding:5px; margin-left:14px; background-color:#eff5f5;" %>   
      <%= x.submit "✔", :style => "height:40px; width:40px; margin-top:10px; border-radius:100%; font-size:20px; background-color:#cce0ff; cursor:pointer; margin-left:270px;" %>        
     <% end %> 

    </div> 
+0

は、エラー・スタック・トレースを追加してください。 –

+0

すみません、私はその言葉@ArupRakshitに慣れていません – nums

答えて

0

は、Railsは知らない公共のバンドル新しいカードに関連付けられます。

は、私はこれを行うには、より効率的な方法があります確信しているが、あなたはカードコントローラでこれを試みることができる:

def new 
    @public_bundle = PublicBundle.find(params[:id]) 
    @card = @public_bundle.cards.build 
end 

def create 
    @public_bundle = PublicBundle.find(params[:id])   
    @card = @public_bundle.cards.build(card_params) 
    @card.user_id = current_user.id 
    if @card.save 
    redirect_to '/' 
    else 
    render @public_bundle 
    end 
end