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>
は、エラー・スタック・トレースを追加してください。 –
すみません、私はその言葉@ArupRakshitに慣れていません – nums