Ajax bootstrap modal in rails 4 Newbie here!

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>
    
    <%= f.submit class: "btn btn-primary" %> <%= link_to "Cancel", "#", class: "btn", data: {dismiss: "modal"} %>
    <% end %>

    projects/_index.html.erb


    <% @customer.projects.each do |project| %>

    <%= project.project_name %> <%= project.project_description %> <%= project.project_started %> <%= project.project_estimated_to_end %> <%= project.project_status %> <% end %>

    projects/_new.html.erb


    New Project

    <%= render "form" %>

    projects/_save.html.erb


    $(“ul.errors”).html("")
    <% if @project.errors.any? %>
    <% @project.errors.full_messages.each do |message| %>
    $(“ul.errors”).append($("

  • ").html("<%= message.html_safe %>"))
    <% 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!

  • On 18 October 2014 15:09, Pepeng A. [email protected] wrote:


    def create
    @customer = Customer.find(params[:customer_id])

    I guess that params[:customer_id] is null. Check in development.log
    and you will see what parameters are being posted.

    Colin

    Use customer has_many: :projects
    accepts_nested_attributes_for :projects

    and then make customer view to handle project data or ( if u need above
    approach ) add customer id to above _form.html.

    if u need further help, please let me know. :slight_smile:

    Thank you so much Mr. Colin I solved the problem. I forget i used the
    instance of the customer
    [def create
    @customer = Customer.find(params[:customer_id])
    @project = Customer.projects.create(project_params)
    end] …

    It should be

    [def create
    @customer = Customer.find(params[:customer_id])
    @project = @customer.projects.create(project_params)
    end] …

    :smiley:

    Thank you so much Mr. Sampath. I solved the problem. I forget that i
    should used the instance of the customer
    [def create
    @customer = Customer.find(params[:customer_id])
    @project = Customer.projects.create(project_params)
    end] …

    It should be

    [def create
    @customer = Customer.find(params[:customer_id])
    @project = @customer.projects.create(project_params)
    end] …

    :smiley: is it okay to you sir if I ask some question if I can’t resolve some
    problem or become my mentor. I want to learn more in rails 4. :slight_smile:

    On Mon, Oct 20, 2014 at 10:05 AM, Sampath M.
    <[email protected]