2017-05-22 1 views
0

Ich erstelle eine Join-Tabelle, die mir zeigt, welcher Mitarbeiter welches Comic verkauft hat. Als ich in meinem Mitarbeiternamen eingeben, wird es mir diesen Fehler gebenIch bekomme einen NoMethodError und ich bin mir nicht sicher warum

NoMethodError in Showemployeesales#employeesaleout 
undefined method `name_id' for nil:NilClass 

Hier mein Code

für meinen Controller ist
def employeesaleout 
@employee_name = params[:employee_name_in] 
r = Employee.find_by_name_id(@employee_name) 
@sale_list = r.sales 
end 

Hier ist mein Code für meine Eingabe Ansicht „employeenamein“

<h1>Showemployeesales#employeenamein</h1> 
    <p>Find me in app/views/showemployeesales/employeenamein.html.erb</p> 
    <%= form_tag(showemployeesales_employeesaleout_path, :controller => 
    "showemployeesales", :action => "employeesaleout", :method => "post") do 
     %> 

    <div class="field"> 
     <%= label_tag :Employee_Name %><br /> 
     <%= text_field_tag :employee_name_in %> 
    </div> 

    <div class="actions"> 
      <%= submit_tag "Submit Employee Name" %> 
    </div> 
    <% end %> 

Hier ist mein Code für meine Ausgabeansicht

<center><h1>These are the Sales for <%= @employee_name %> </h1></center> 
    <br /> <br /> 

    <center><table width = 65% border = 1> 
    <tr> <th> Comic Name </th><th> Comic ID </th></tr> 
    <% @sale_list.each do |m| %>  

    <tr> <td> <%= m.product.name_id %> </td> <td> <%= m.product.id_no %> 
    </td></tr> 
    <% end %> </table> </center><br /> <br /> 

Und meine Produkte Tisch unter meinem Schema

create_table "products", force: :cascade do |t| 
    t.string "name_id" 
    t.integer "id_no" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    end 

Was mache ich falsch?

+0

Sie müssen ein 'Produkt' ohne eine' name_id' haben. Am einfachsten ist es, Ihre Daten anzuzeigen und dieses Feld zu aktualisieren. –

+0

Es tut mir leid, aber ich weiß nicht, worauf Sie hinauswollen. Was soll ich machen? Ich bin ziemlich neu bei Ruby on Rails. In meiner Produkttabelle habe ich 2 Einträge mit einem Namen und einer ID und nichts ist leer. –

+0

@AlejandroMontilla Ich habe RoR seit Jahren programmiert und habe keine Ahnung, worauf Sie hinauswollen. – max

Antwort

0

Sie sind wirklich zu kompliziert.

Um Daten in REST anzuzeigen, verwenden Sie eine GET-Anforderung, keine Post. Und die Benennung ist ... nicht gut.

# routes.rb 
resources :employees do 
    resouces :sales, only: :index, module: :employees 
end 

# app/controllers/employees/sales_controller.rb 
class Employees::SalesController 
    # /employees/:employee_id/sales 
    def index 
    @employee = Employee.includes(:sales) 
         .find(params[:id]) 
    @sales = @employee.sales 
    end 
end 

einfach eine Liste der Mitarbeiter erstellen und einen Link für jeweils:

<% @employees.each do |e| %> 
    <%= link to e.name, employee_sales_path(e) %> 
<% end %> 

Oder ein Formular mit autocomplete verwenden. Aber wirklich KISS auf deinem Niveau.

# app/views/employees/sales/index.html.erb 
# use CSS instead of <center> and missusing <br> tags - it's not 1998 
<h1>These are the Sales for <%= @employee.name %></h1> 
<table> 
    <tr> 
    <th>Comic Name</th> 
    <th> Comic ID</th> 
    </tr> 
    <% @sales.each do |s| %>  
    <tr> 
    <td><%= s.product.name_id %></td> 
    <td><%= s.product.id_no %></td> 
    </tr> 
    <% end %> 
</table> 
Verwandte Themen