2017-05-22 5 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

あなたは本当にそれをovercomplicatingしています。

RESTでデータを表示するには、投稿ではなくGETリクエストを使用します。そして命名は...良くない。

# 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 

ただ、従業員のリストを作成し、それぞれのリンクがあります。

<% @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> 
関連する問題