2016-01-28 3 views
0

Я после этой tutorialRails неопределенной переменной @assets


Моя ошибка @asset переменная, которую я использую в моей _form.html.erb и index.html.erb не работает .Это говорит Первый аргумент в виде не может содержать ноль или быть пустой .Но когда я заменяю это будет: asset_path тогда он начинает работать
[assets_controller]

class AssetsController < ApplicationController 
    before_filter :authenticate_user! #authenticate for users before any methods is called 


    def index 
    @assets = current_user.assets  
    end 



    def new 
    @asset = current_user.assets.new 
    end 

    def create 
    @asset = current_user.assets.new(user_assets) 

    end 




private 
    def user_assets 
     params.require(:asset).permit(:user_id, :uploaded_file) 
    end 

end 


[активы/_form.html.erb]

<%= form_for @assets, :html => {:multipart => true} do |f| %> 
    <%= f.error_messages %> 

    <p> 
     <%= f.label :uploaded_file, "File" %><br /> 
     <%= f.file_field :uploaded_file %> 
     </p> 
    <p><%= f.submit "Upload" %></p> 
<% end %> 


[index.html.erb]

<% title "Assets" %> 
    <table> 
     <tr> 
     <th>Uploaded Files</th> 
     </tr> 

     <% for asset in @assets %> 

     <tr> 
      <td><%= link_to asset.uploaded_file_file_name, asset.uploaded_file.url %></td> 
      <td><%= link_to "Show", asset %></td> 
      <td><%= link_to "Edit", edit_asset_path(asset) %></td> 
      <td><%= link_to "Destroy", asset, :confirm => 'Are you sure?', :method => :delete %></td> 
     </tr> 
     <% end %> 
    </table> 
    <p><%= link_to "New Asset", new_asset_path %></p> 


[рейк маршруты]

new_user_session GET /users/sign_in(.:format)  devise/sessions#new 
      user_session POST /users/sign_in(.:format)  devise/sessions#create 
    destroy_user_session GET /users/sign_out(.:format)  devise/sessions#destroy 
      user_password POST /users/password(.:format)  devise/passwords#create 
     new_user_password GET /users/password/new(.:format) devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PATCH /users/password(.:format)  devise/passwords#update 
         PUT /users/password(.:format)  devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)  devise/registrations#cancel 
     user_registration POST /users(.:format)    devise/registrations#create 
    new_user_registration GET /users/sign_up(.:format)  devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)   devise/registrations#edit 
         PATCH /users(.:format)    devise/registrations#update 
         PUT /users(.:format)    devise/registrations#update 
         DELETE /users(.:format)    devise/registrations#destroy 
        root GET /       homes#index 
        assets GET /assets(.:format)    assets#index 
         POST /assets(.:format)    assets#create 
       new_asset GET /assets/new(.:format)   assets#new 
       edit_asset GET /assets/:id/edit(.:format)  assets#edit 
        asset GET /assets/:id(.:format)   assets#show 
         PATCH /assets/:id(.:format)   assets#update 
         PUT /assets/:id(.:format)   assets#update 
         DELETE /assets/:id(.:format)   assets#destroy 
+1

Вам нужно удалить эту строку '<% @ assets =: assets_path%>' – Pavan

+1

assets_path - это «вспомогательный метод». Почему вы относитесь к нему как к символу? –

+0

О, это была ошибка ... Я уже удалял эту строку ... моя ошибка в основном, когда я использую: assets_path, она работает, но когда я использую переменную экземпляра, она не работает –

ответ

2
#assets/_form.html.erb 
<%= form_for @asset, :html => {:multipart => true} do |f| %> 

Если вы используете form_for, вы должны передать правильный тип объекта. Как правило, это делается с переменной (как указано выше), но может быть с символом.

Метод form_for передает другие атрибуты формы (path и т. Д.) Из этого начального значения, следовательно, для этого необходимо иметь начальное значение.

-

Проблема у вас есть то, что для вашего нового метода, вы объявили @asset, но используют @assets в вашем form_for. К сожалению, стандартная необъявленная/ноль переменная проблема.

+0

его работающий сейчас thx –