2015-03-15 2 views
0

Я продолжаю получать сообщение о том, что я не передаю идентификатор, когда пытаюсь уничтожить Feature, но я делаю это с помощью set_feature before_action!Rails: неправильное количество аргументов (0 для 1)

Полная ошибка:

wrong number of arguments (0 for 1) 

Extracted source (around line #63): 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_feature(params) 
     @feature = Feature.find(params[:id]) 
    end 

Rails.root: C:/Users/Nick/Amnesia_Rails/Master 

Application Trace | Framework Trace | Full Trace 
app/controllers/apps/elements/features_controller.rb:63:in `set_feature' 
Request 

Parameters: 

{"_method"=>"delete", 
"authenticity_token"=>"0Z/SxhhEO6OA6eiShd+1PZI0DQ9QK1I7G8wqoInz+vM=", 
"element_id"=>"3", 
"id"=>"5"} 

Шоу просмотров:

<% @app.elements.each do |element| %> 
     <tr> 
      <td><b><%= element.name %></b></td> 
      <td><b><%= element.description %></b></td> 
      <td><b><%= link_to "Remove", [@app, element], method: :delete, confirm: "Are you sure?" %></b></td> 
     </tr> 
     <% element.features.each do |feature| %> 
      <tr> 
      <td><%= feature.name %></td> 
      <td><%= feature.description %></td> 
      <td><%= link_to "Delete", [element, feature], method: :delete %></td> 
      </tr> 
     <% end %> 

      <tr> 
      <td><%= link_to 'Add a Feature', new_element_feature_path(element) %></td> 
      </tr> 
    </tr> 
    <% end %> 

разрушающих и частные методы:

def destroy 
    @feature = Feature.find(params[:id]) 
    @feature.destroy 
    @element = Element.find(params[:element_id]) 
    redirect_to(@element.app) 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_feature(params) 
     @feature = Feature.find(params[:id]) 
    end 

Любая помощь будет оценена! Я совсем потерян!

ответ

1

Параметр before_action не собирается парировать в параметрах магически.

Я думаю, вы должны иметь доступ к «параметрам», не имея в качестве параметра set_feature.

+0

Я немного нуб, так что я извиняюсь, но не могли бы вы объяснить, что вы имеете в виду в немного более подробно? Если вы хотите сказать, что я должен '@ feature.destroy (params [: id])', я уже пробовал это, к сожалению, безрезультатно:/Я просто получаю то же самое без аргументов. – Nickdb93

+0

Я имел в виду, когда вы пишете before_action: set_feature, это просто вызывает set_feature(), когда вы указываете его как требующий один параметр. – djvs

+0

Итак, какой 'параметр' нужно вызвать в' before_action'? – Nickdb93

2

Я думаю, 0 для 1 довольно ясно для вас.

def set_feature(params) 
end 

Это не так. (params) является вашим 1. Если вы не передаете что-то ему, это 0. И вы не.

Просто сделайте before_action это:

def set_feature 
    @feature = Feature.find(params[:id]) 
end 
Смежные вопросы