2017-05-22 13 views
0

어떤 직원이 어떤 만화를 판매했는지 보여주는 조인 테이블을 만들고 있습니다. 내 직원의 이름을 입력 할 때 그것은 나에게이 오류 여기NoMethodError가 발생하고 이유가 확실하지 않습니다.

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

을주고 것은 내 컨트롤러 내 코드입니다

다음
def employeesaleout 
@employee_name = params[:employee_name_in] 
r = Employee.find_by_name_id(@employee_name) 
@sale_list = r.sales 
end 

내 코드는

<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 %> 
"employeenamein"내 입력보기위한 것입니다

내 출력보기에 대한 내 코드는 다음과 같습니다.

<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 /> 
내 스키마 내가 잘못 뭐하는 거지

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 

에서

그리고 내 제품 테이블?

+0

'name_id'가없는'product'가 있어야합니다. 가장 간단한 방법은 데이터를보고 해당 필드를 업데이트하는 것입니다. –

+0

미안하지만 무슨 일이 일어나고 있는지 모르겠다. 내가 뭘해야하니? Ruby on Rails는 상당히 새로운 기능입니다. 내 Products 테이블에는 이름과 ID가있는 2 개의 항목이 있으며 아무것도 공백이 아닙니다. –

+0

@AlejandroMontilla 저는 RoR을 수년간 코딩 해왔고 여러분이 무엇을 얻고 있는지 전혀 모릅니다. – max

답변

0

정말 과장되어 있습니다.

REST에서 데이터를 보려면 게시물이 아닌 GET 요청을 사용하십시오. 명명은 ... 좋지 않습니다.


# 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 

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

그냥 직원의 목록을 작성하고 각각에 대한 링크가 있습니다

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

또는 autocomplete와 양식을 사용합니다. 하지만 실제로는 KISS 수준입니다.

# 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>