私のアプリは 4 つのモデルで構成されています。ユーザー > リスト > ウィッシュ < アイテム。私はフロントページにすべてのアイテムを表示していますが、個々のアイテムから願い事を構築できるようにしたいと考えています.
関連付けのため、ユーザーがアイテムを関連付けるリストを指定できるようにする必要があります。ajax呼び出しとモーダルでやりたい。item
ただし、パーシャル内のインスタンス変数は、リストを指定するフォームをレンダリングするを呼び出す_item.html.erb
を介して渡すことはできません。link_to
app/views/wishes/new.js.erb
私は Rails と Ruby の初心者で、この問題に何日も悩まされていました。したがって、どんな助けも大歓迎です。
協会:
class User < ActiveRecord::Base
has_many :lists, dependent: :destroy
has_many :wishes, through: :lists
has_many :items, through: :wishes
end
class List < ActiveRecord::Base
belongs_to :user
has_many :wishes, dependent: :destroy
has_many :items, through: :wishes
end
class Wish < ActiveRecord::Base
belongs_to :list, touch: true
belongs_to :item
end
class Item < ActiveRecord::Base
has_many :wishes
has_many :lists, through: :wishes
end
アプリ/ビュー/static_pages/home.html.erb
<%= render @items %>
アプリ/ビュー/アイテム/_item.html.erb
<div class="span4">
<div class="white-box item">
<div class="image-container">
<%= link_to "Wishlistt it", new_wish_path(item_id: item.id), id: "new_wish", class: "btn btn-primary btn-large", remote: true %>
<a href="<%= item_path(item) %>" class="item-link">
<em class="mark"></em>
<%= image_tag item.image_url(:medium).to_s %>
</a>
</div>
<h3><%= item.title %></h3>
<%= item.wishes.count %> wishes this item
</div>
</div>
アプリ/ビュー/願い/new.js.erb
$('body').append('<%= j render "new_wish" %>');
$('#new_wish').modal('toggle')
アプリ/ビュー/ウィッシュ/_new_wish.html.erb
<div id="new_wish" class="modal hide fade" tabindex="1" role="dialog" aria-labelledby="make_wish" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="wishlistt_it">Wishlistt it</h3>
</div>
<div id="linkpreview">
<div class="modal-body">
<%= form_for(@item.wishes.build(item_id: @item.id)) do |f| %>
<%= f.hidden_field :item_id %>
<%= f.label :list_id %>
<%= select_tag :list_id, options_for_select(current_user.lists.all.collect{ |u| [u.name, u.id] }) %>
<%= f.submit "Add wish", class: "btn btn-large btn-primary" %>
<% end %>
</div>
<div class="modal-footer">
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
<%= link_to "Get info", new_item_path, id: "urlb", class: "btn btn-primary", remote: true %>
</div>
</div>
</div>
からのリンクを押すと、_item.html.erb
次のエラーが発生します。
undefined method `wishes' for nil:NilClass
編集
Wishes_controller.rb
class WishesController < ApplicationController
before_filter :signed_in_user, only: [:create, :destroy]
before_filter :correct_user, only: :destroy
def new
@wish = Wish.new
end
def create
@item = Item.find_by_id(params[:item_id])
@wish = Wish.create!(item_id: params[:wish][:item_id], list_id: params[:list_id])
redirect_to root_url
end
def destroy
@wish.destroy
redirect_to current_user
end
private
def correct_user
@wish = current_user.wishes.find_by_id(params[:id])
redirect_to current_user if @wish.nil?
end
end