I've been trying to implement this answer into my app (Rails - passing parameters in link_to) As it addresses my problem directly but i can't get it to work. Can someone look at my code and tell my what i'm doing wrong. Here are my routes:
Rails.application.routes.draw do
devise_for :admins, path: 'admins'
devise_for :employees, path: 'employees'
namespace :employees do
resources :kudos
resources :rewards, only: [:index, :show], shallow: true do
resources :orders, only: [:create, :new]
end
end
namespace :admins do
resources :kudos, only: [:index, :destroy]
resources :employees, only: [:index, :edit, :update, :destroy]
resources :company_values
resources :rewards
end
get '/admin' => "admins/pages#dashboard", :as => :admin_root
root 'employees/kudos#index'
end
Here is my orders controller
module Employees
module Rewards
class OrdersController < EmployeesController
def new
@order= Order.new
if params[:reward_id]
@order.reward_id = params[:reward_id]
end
end
def create
@order = Order.new(order_params)
@order.employee = current_employee
@order.save
flash[:notice] = 'Reward was successfully bought'
redirect_to rewards_path
end
private
def order_params
params.require(:order).permit(:employee_id, :reward_id)
end
end
end
end
and my rewards controller
class RewardsController < EmployeesController
def index
@rewards = Reward.all
end
def show
render :show, locals: { reward: Reward.find(params[:id]) }
end
private
def reward_params
params.require(:reward).permit(:title, :description, :price)
end
end
And last but not least my rewards index view:
<h1>Rewards listing page</h1>
<table>
<thead>
<tr>
<th>Title</th>
<th>Price</th>
<th>Show Reward</th>
<th>Buy Reward</th>
</tr>
</thead>
<tbody>
<% @rewards.each do |reward| %>
<tr>
<td><%= reward.title %></td>
<td><%= reward.price %></td>
<td><%=button_to 'Show', employees_reward_path(reward), method: :get %></td>
<td><%=link_to 'Buy', new_employees_reward_order_path(:order=>{:reward_id => reward.id}) %></td>
</tr>
<% end %>
</tbody>
</table>
Right now i'm getting the following error
Showing /home/valar/Dokumenty/ERP_v1/app/views/employees/rewards/index.html.erb where line #18 raised:
No route matches {:action=>"new", :controller=>"employees/orders", :order=>{:reward_id=>6}}, missing required keys: [:reward_id]
Did you mean? new_employees_reward_order_url
And if I pass an instance variable like this (like the answer suggested):
link_to 'Buy', new_employees_reward_order_path(:order=>{:reward_id => @reward.id})
i get the undefined method `id' for nil:NilClass
error
Please help me figure out what I'm doing wrong.