0

こんにちは、Rails 4rc1 を使用しています。@feed.idなぜ私のファイルで認識されないのか、本当に理解できませんfeeds.js。助けてくれてありがとう。

NoMethodError in Feeds#index
Showing myapp/app/views/layouts/application.haml where line #6 raised:

undefined method `id' for nil:NilClass
(in myapp/app/assets/javascripts/feeds.js.coffee.erb)

# アプリケーション.haml

%head
  %title Rails4Bootstrap
  = stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true
  = javascript_include_tag "application", "data-turbolinks-track" => true
  = csrf_meta_tags
%body

# feeds_controller.rb

def index
@feeds = Feed.all
@feed = Feed.new

respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @feeds }
  format.js
end
end

def destroy
  @feed = Feed.find(params[:id])
  @feed.destroy
  respond_to do |format|
    format.html { redirect_to feeds_path, notice: "Feed successfully deleted." }
    format.json { head :no_content }
    format.js
  end
end

# ビュー/フィード/index.haml

= form_for(@feed, remote: true) do |f|
  .field
    = f.label :url
    %br/
    = f.text_field :url
  .actions
    = f.submit


- @feeds.each do |feed|
  #feed{"data-id" => feed.id}
  ....
    = link_to 'Delete', feed, method: :delete, remote: true

# assets/javascripts/feeds.js.coffee.erb

$('#feed_<%= @feed.id %>').fadeOut

アプリケーション トレース:

app/assets/javascripts/feeds.js.coffee.erb:27:in `block in singleton class' app/assets/javascripts/feeds.js.coffee.erb:-5:in `instance_eval' app/assets/javascripts/feeds.js.coffee.erb:-5:in `singleton class' app/assets/javascripts/feeds.js.coffee.erb:-7:in `__tilt_70104733785500' app/views/layouts/application.haml:6:in `_app_views_layouts_application_haml__4512126609701308533_70104706177220' app/controllers/feeds_controller.rb:28:in `index'

4

1 に答える 1

1

経験則として、スクリプトを ajax レスポンスとして返すことはありません。代わりに、json オブジェクトを返します。そうすれば、javascript は json を調べて、fadeOut の正しい ID を取得できます。これをやったほうがいい。また、アプリケーションをより安らかに保ち、JS をアセットに保持することもできます。あなたの場合、コントローラー内の ivar を認識しないアセットからスクリプトをロードします。これが、エラーが発生する理由です。@feed がこのスコープに設定されることはありません。

于 2013-05-29T01:09:38.103 に答える