Good day, I’m a beginner in rails I already develop a simple app in
rails
but i want to upgrade the app to be an ajax, I already created the first
model customer but in the second model project where customer has many
projects and project belongs_to customer, those ajax form modal that i
copy
in a tutorial didn’t work. I experiencing some error in CRUD in project
part… I’m not familiar in nested resources and the Ajax part.
this is the error: "ActiveRecord::RecordNotFound (Couldn’t find
Customer
without an ID):
- app/controllers/projects_controller.rb:14:in `create’"*
Project Controller
class ProjectsController < ApplicationController
respond_to :html, :js
def index
@customer = Customer.find(params[:customer_id])
end
def new
customer = Customer.find(params[:customer_id])
@project = customer.projects.new
end
def create
@customer = Customer.find(params[:customer_id])
@project = Customer.projects.create(project_params)
end
private
def project_params
params.require(:project).permit(:project_name, :project_description,
:project_started, :project_estimated_to_end, :project_status)
end
end
Project model and Customer model
class Project < ActiveRecord::Base
belongs_to :customer
end
class Customer < ActiveRecord::Base
has_many :projects
validates :customer_name, presence: true
validates :customer_company, presence: true
validates :customer_email, presence: true
validates :customer_desc, presence: true
end
projects/_form.html.erb
<%= form_for @project, remote: true, html: { class: “form-horizontal”,
style: “display:inline;” } do |f| %>
<div class="control-group">
<%= f.label :project_name, class:"control-label" %>
<div class="controls">
<%= f.text_field :project_name %>
</div>
</div>
<div class="control-group">
<%= f.label :project_started, class: "control-label" %>
<div class="controls">
<%= f.date_select :project_started %>
</div>
</div>
<div class="control-group">
<%= f.label :project_estimated_to_end, class: "control-label" %>
<div class="controls">
<%= f.date_select :project_estimated_to_end %>
</div>
</div>
<div class="control-group">
<%= f.label :project_status, class: "control-label" %>
<div class="controls">
<%= f.select :project_status,['Doing','Done'], prompt: true %>
</div>
</div>
<div class="control-group">
<%= f.label :project_description, class: "control-label" %>
<div class="controls">
<%= f.text_field :project_description %>
</div>
</div>
projects/_index.html.erb
<% @customer.projects.each do |project| %>
projects/_new.html.erb
New Project
projects/_save.html.erb
$(“ul.errors”).html("")
<% if @project.errors.any? %>
<% @project.errors.full_messages.each do |message| %>
$(“ul.errors”).append($("
<% end %>
<% else %>
$(".product-index").html("<%= escape_javascript(render ‘index’) %>")
$("#product-modal").modal(“hide”)
<% end %>
projects/create.js.erb
<%= render “save” %>
projects/index.html.erb
Project Table
<%= link_to "New Project", new_customer_project_path(@customer),
remote: true, class: “btn btn-primary” %>
<div class="new-product"></div>
<table class='table' id='people_table'>
<thead>
<tr>
<th>Project Name</th>
<th>Project Description</th>
<th>Projct Started</th>
<th>Project Estimated to end</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody class="product-index">
<%= render "index" %>
</tbody>
</table>
<div id="product-modal" class="modal fade">
<div class="modal-dialog">
<div id="inner-product-modal" class="modal-content"></div>
</div>
</div>
projects/new.js.erb
$("#inner-product-modal").html("<%= escape_javascript(render ‘new’) %>")
$("#product-modal").modal(“show”)
routes.rb
resources :customers do
get “delete”
resources :projects
end
resources :projects
root :to => “customers#index”
Hope you can help me… Thank you!