In my rails app I have a customer form of two steps.In step one customer enters his details and logo and pdf and in the next step he selects a theme which he like.
my customers_controller
def new
if current_user.admin?
#customer = Customer.new
#customer.additional_fields.build
else
redirect_to root_path, notice: 'You dont have admin permissions'
end
end
def edit
if current_user.admin?
#customer = Customer.find(params[:id])
else
redirect_to root_path, notice: 'You dont have admin permissions'
end
end
def theme_selector
#customer_id = params[:customer_id]
puts #customer_id
end
def create
Rails.logger.debug "PARAMS:"
params.each do |k,v|
Rails.logger.debug "#{k}: #{v}"
end
if current_user.admin?
#customer = Customer.new(customer_params)
respond_to do |format|
if #customer.save
format.html do
redirect_to #customer, notice: 'Customer was successfully created.'
end
format.json { render :show, status: :created, location: #customer }
else
format.html { render :new }
format.json do
render json: #customer.errors, status: :unprocessable_entity
end
end
end
else
redirect_to root_path, notice: 'You dont have admin permissions'
end
end
_form.html.erb
<%= form_for #customer, url: theme_selector_path,:method => :post,html: { multipart: true } do |f| %>
<input type="hidden" name="customer_id" value="<%= #customer.id %>">
<% if #customer.errors.any? %>
<div id="error_explanation">
<h2>
<%= "#{pluralize(#customer.errors.count, "error")} prohibited this customer from being saved:" %>
</h2>
<ul>
<% #customer.errors.full_messages.each do |msg| %>
<li>
<%= msg %>
</li>
<% end %>
</ul>
</div>
<% end %>
<div class="form-group">
<%= f.label :name %>
<%= f.text_field :name, class:"form-control" %>
</div>
<div class="form-group">
<%= f.label :address %>
<%= f.text_field :address, class:"form-control" %>
</div>
<div class="form-group">
<%= f.label :affiliate_id %>
<%= f.text_field :affiliate_id, class:"form-control" %>
</div>
<div class="control-group">
<%= f.label :logo, :class => 'control-label' %>
<div class="controls">
<%= f.file_field :logo,accept: 'image/png,image/gif,image/jpeg, image/jpg' %>
</div>
</div>
<div class="form-group">
<label>Upload File</label>
<%= f.file_field :file,accept: 'application/pdf' %>
</div>
<div class="form-group">
<% f.fields_for :additional_fields do | ing | %>
<%= ing.text_field :key, :size => 50 %>
<%= ing.text_field :value, :size => 50 %>
<% end %>
</div>
<div class="actions">
<div class="row">
<div class="col-md-5">
<span><%= f.submit 'Save', class: "btn-addmore" %></span>
<span><!--%= link_to 'Back', customers_path, class: "btn btn-danger" %--> </span>
</div>
<div class="col-md-2 col-md-offset-4">
<%= link_to "next", theme_selector_path, class: "btn-update" %>
</div>
</div>
</div>
<% end %>
I have a submit button at theme_selector.html.erb to create the customer.But I was getting an error "Paperclip::AdapterRegistry::NoHandlerError (No handler found for "#")" in customers controller create action.
development log:
Processing by CustomersController#create as HTML
Parameters: {"customer"=>{"name"=>"test", "address"=>"test", "affiliate_id"=>"test", "category"=>"", "domain"=>"test#web.com", "phone"=>"1111111111", "contact"=>"1214521", "email"=>"test#malibu.com", "comments"=>"none", "logo"=>"# <ActionDispatch::Http::UploadedFile:0x007f3f4946c258>", "file"=>"#<ActionDispatch::Http::UploadedFile:0x007f3f4946c208>"}}
PARAMS:
customer: #<ActionController::Parameters:0x007f3f442c0058>
controller: customers
action: create
Completed 500 Internal Server Error in 10ms (ActiveRecord: 1.0ms)
Paperclip::AdapterRegistry::NoHandlerError (No handler found for "# <ActionDispatch::Http::UploadedFile:0x007f3f4946c258>"):
app/controllers/customers_controller.rb:47:in `create'
Thanks in Advance!
The step-1 of customer form contains customer details and step-2 contains theme selection.However I was able to upload and save the data in step-1 but I was getting the error while saving the data from step-1 and step-2 together at the theme_selector page .
customer.rb
class Customer < ApplicationRecord
has_attached_file :logo
validates_attachment_content_type :logo, :content_type => /\Aimage\/.*\Z/
has_attached_file :file
validates_attachment_content_type :file, :content_type => "application/pdf"
end
Related
I am using Ruby: 3.1.0 and Rails: 7.0.4, I have added some abilities in ability.rb file for post permissions, getting warden proxy error.
app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
can :update, Post do |post|
post.user_id == user.id if user.present?
end
can :destroy, Post do |post|
post.user_id == user.id if user.present?
end
end
end
app/views/posts/index.html.erb
<h1 class="text-center m-4 text-success">Posts</h1>
<div id="posts">
<div class="row">
<% #posts.each do |post| %>
<%= render post %>
<% end %>
</div>
</div>
app/views/posts/_post.html.erb
<div class="col-lg-4 mb-2">
<div class="card border-0" style="width: 18rem;">
<% if post.image.present? && !post.image.image_url.file.nil? %>
<%= image_tag(post.image.image_url.url,size: "100x150",class: "card-img-top") %>
<% end %>
<span><%= postTimeAtCreated(post) %>
ago
<% if can? :update, post %>
<span style="margin-left:8px;">
<%= link_to "edit", edit_post_path(post) %>
</span>
<% end %>
<% if can? :destroy, post %>
<span style="margin-left:8px;">
<%= link_to "delete", post_path(post), data: { turbo_method: :delete } %>
</span>
<% end %>
</span>
<div class="card-body">
<p>
<span class="like">
<%= link_to fa_icon("thumbs-up"),"#", data: { action: "click->like#like", id: "post_#{post.id}", user_id: "user_#{post.user_id}" } %></span>
<span class="comment">
<%= link_to fa_icon("comment"),"#", data: { action: "click->like#comment",comment_url: new_post_comment_path(post.id) } %>
</span>
</p>
<p id="likes_<%= post.id %>"><%= like_counts(post.id) %>
likes
</p>
<h5 class="card-title"><%= post.title %></h5>
<p class="card-text"><%= post.description %></p>
</div>
</div>
</div>
app/controllers/posts_controller.rb
def create
#post = Post.new(post_params)
#post.user_id = current_user.id
#post.build_image if params[:post][:image_attributes] == nil
respond_to do |format|
if #post.save
format.html { redirect_to posts_url, notice: I18n.t("postCreate") }
format.json { render :show, status: :created, location: #post }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: #post.errors, status: :unprocessable_entity }
end
end
end
private
def post_params
params.require(:post).permit(:title, :description, image_attributes:
[:id,:image_url])
end
it's giving the below error in create action.
Devise could not find the Warden::Proxy instance on your request environment.
Make sure that your application is loading Devise and Warden as expected and that the Warden::Manager middleware is present in your middleware stack.
If you are seeing this on one of your tests, ensure that your tests are either executing the Rails middleware stack or that your tests are using the Devise::Test::ControllerHelpers module to inject the request.env['warden'] object for you.
thanks!
api. Now need to insert a record which has associated records. I read nested attributes but didn't get any idea. I can't understand well.
I tried with one example in rails mvc project but even i can't create associated record in one-one mapping itself. Please guid me what the steps to do this or any good articles with sample?
Anyway the following is my workings
My model is
class Instructor < ActiveRecord::Base
has_one :office_assignment
has_many :departments
has_and_belongs_to_many :courses
accepts_nested_attributes_for :office_assignment
end
class OfficeAssignment < ActiveRecord::Base
belongs_to :instructor
end
My controller methods for create
def new
#instructor = Instructor.new
end
def create
#instructor = Instructor.new(instructor_params)
respond_to do |format|
if #instructor.save
format.html { redirect_to #instructor, notice: 'Instructor was successfully created.' }
format.json { render :show, status: :created, location: #instructor }
else
format.html { render :new }
format.json { render json: #instructor.errors, status: :unprocessable_entity }
end
end
end
private
# Use callbacks to share common setup or constraints between actions.
def set_instructor
#instructor = Instructor.find(params[:id])
end
# Never trust parameters from the scary internet, only allow the white list through.
def instructor_params
params.require(:instructor).permit(:LastName, :FirstMidName, :HireDate, office_assignment_attributes: [:Location])
end
My create form
<%= form_for #instructor, :html => { :class => "form-horizontal instructor" } do |f| %>
<% if #instructor.errors.any? %>
<div id="error_expl" class="panel panel-danger">
<div class="panel-heading">
<h3 class="panel-title"><%= pluralize(#instructor.errors.count, "error") %> prohibited this instructor from being saved:</h3>
</div>
<div class="panel-body">
<ul>
<% #instructor.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
</div>
<% end %>
<div class="form-group">
<%= f.label :LastName, :class => 'control-label' %>
<div class="controls">
<%= f.text_field :LastName, :class => 'form-control' %>
</div>
<%= error_span(#instructor[:LastName]) %>
</div>
<div class="form-group">
<%= f.label :FirstMidName, :class => 'control-label' %>
<div class="controls">
<%= f.text_field :FirstMidName, :class => 'form-control' %>
</div>
<%= error_span(#instructor[:FirstMidName]) %>
</div>
<div class="form-group">
<%= f.label :HireDate, :class => 'control-label' %>
<div class="controls">
<%= f.text_field :HireDate, :class => 'form-control' %>
</div>
<%= error_span(#instructor[:HireDate]) %>
</div>
<div class="form-group">
<%= f.label :Location, :class => 'control-label' %>
<div class="controls">
<input type="text" name="office_assignment_Location" class ="form-control">
</div>
<%= error_span(#instructor[:HireDate]) %>
</div>
<%= f.submit nil, :class => 'btn btn-primary' %>
<%= link_to t('.cancel', :default => t("helpers.links.cancel")),
instructors_path, :class => 'btn btn-default' %>
<% end %>
Please guide me..
Edit:
Changes in html file
<%= f.fields_for :office_assignment_Location do |loc| %>
<div class="form-group">
<%= loc.label :Location, :class => 'control-label' %>
<div class="controls">
<%= loc.text_field :Location %>
</div>
</div>
<%= loc.link_to_add "Add Location", :office_assignment_Location , :class=>'btn btn-primary'%>
<% end %>
My param in controller
def instructor_params
params.require(:instructor).permit(:LastName, :FirstMidName, :HireDate, office_assignment_attributes: [:id, :Location ,:_destroy])
end
My schema
create_table "instructors", force: :cascade do |t|
t.string "LastName", limit: 255
t.string "FirstMidName", limit: 255
t.date "HireDate"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "office_assignments", primary_key: "Instructor_Id", force: :cascade do |t|
t.string "Location", limit: 255
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_foreign_key "office_assignments", "instructors", column: "Instructor_Id"
FYI: attribute's name should start with small letter not capital.
Here are some changes:
class Instructor < ActiveRecord::Base
has_one :office_assignment , :dependent => :destroy # add dependent destroy
has_many :departments
has_and_belongs_to_many :courses
accepts_nested_attributes_for :office_assignment, :reject_if => :all_blank, :allow_destroy => true # add allow destroy
end
Some change in strong Parameters:
def instructor_params
params.require(:instructor).permit(:LastName, :FirstMidName, :HireDate, office_assignment_attributes: [:id, :Lesson ,:_destroy])
end
Note: Don't forget to add :id and :_destroy in office_assignment_attributes
Now in View(form_template):
Instead of this:
<div class="form-group">
<%= f.label :Location, :class => 'control-label' %>
<div class="controls">
<input type="text" name="office_assignment_Location" class ="form-control">
</div>
<%= error_span(#instructor[:HireDate]) %>
</div>
It should be:
<%= nested_form_for #instructor, :html => { :class => "form-horizontal instructor" } do |f| %>
......
.....
<%= f.fields_for :office_assignment do |loc| %>
<div class="form-group">
<%= loc.label :Location, :class => 'control-label' %>
<div class="controls">
<%= loc.text_field :Location %>
</div>
</div>
<% end %>
<%= f.link_to_add "Add Location", :office_assignment , :class=>'btn btn-primary'%>
You have to create nested form like this. I hope this helps you.
Note: Use nested_form_for instead of form_for in your form:
For your reference:
http://railscasts.com/episodes/196-nested-model-form-part-1
http://railscasts.com/episodes/197-nested-model-form-part-2
I want to login with my app and i am getting the following error.
error:
NoMethodError in SessionsController#loginadmin
undefined method `remember' for #<SessionsController:0x267c300>
Rails.root: C:/Site/swargadwar_admin
Application Trace | Framework Trace | Full Trace
app/controllers/sessions_controller.rb:7:in `loginadmin'
My code are as follows.
views/homes/index.html.erb
<div class="container">
<div style="text-align:center;"><img src="/assets/admin.png" style="width:100px; height:120px; " /></div>
<div class="text-div" style="text-align:center;">Swargadwar, Puri Municipality,govt of odisha</div>
<section>
<% if !current_user %>
<div id="container_demo" >
<!-- hidden anchor to stop jump http://www.css3create.com/Astuce-Empecher-le-scroll-avec-l-utilisation-de-target#wrap4 -->
<a class="hiddenanchor" id="toregister"></a>
<a class="hiddenanchor" id="tologin"></a>
<div id="wrapper">
<div id="login" class="animate form">
<%= form_for :admin,:url => {:action =>'loginadmin',:controller => 'sessions' } do |f| %>
<h1>Log in</h1>
<p>
<label for="username" class="uname" data-icon="u" > Your email or username </label>
<%= f.email_field :email,placeholder:"mysupermail#mail.com",:id => "username" %>
</p>
<p>
<label for="password" class="youpasswd" data-icon="p"> Your password </label>
<%= f.password_field :password,placeholder:"eg. X8df!90EO",:id => "password" %>
</p>
<p class="keeplogin">
<%= f.check_box :remember_me,:id => "loginkeeping" %>
<label for="loginkeeping">Keep me logged in</label>
</p>
<p class="login button">
<%= f.submit "Login" %>
</p>
<p class="change_link">
Not a member yet ?
Join us
</p>
<% end %>
</form>
</div>
<div id="register" class="animate form">
<%= form_for :admin,:url => {:action => 'create_registration',:controller => "admins" } do |f| %>
<h1> Sign up </h1>
<p>
<label for="usernamesignup" class="uname" data-icon="u">Your username</label>
<%= f.text_field :user_name,placeholder:"mysuperusername690",:id => "usernamesignup" %>
</p>
<p>
<label for="emailsignup" class="youmail" data-icon="e" > Your email</label>
<%= f.email_field :email,placeholder:"mysupermail#mail.com",:id => "emailsignup" %>
</p>
<p>
<label for="passwordsignup" class="youpasswd" data-icon="p">Your password </label>
<%= f.password_field :password,placeholder:"eg. X8df!90EO",:id => "passwordsignup" %>
</p>
<p>
<label for="passwordsignup_confirm" class="youpasswd" data-icon="p">Please confirm your password </label>
<%= f.password_field :password_confirmation,placeholder:"eg. X8df!90EO",:id => "passwordsignup" %>
</p>
<p>
<label for="usernamesignup" class="uname" data-icon="u">Add Image</label>
<%= f.file_field :picture %>
</p>
<p class="signin button">
<%= f.submit "Sign Up"%>
</p>
<p class="change_link">
Already a member ?
Go and log in
</p>
<% end %>
</div>
<div class="error-div">
<% if #admin.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(#admin.errors.count, "error") %> prohibited this post from being saved:</h2>
<ul>
<% #admin.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
</div>
</div>
</div>
<% end %>
</section>
</div>
controller/sessions_controller.rb
class SessionsController < ApplicationController
def loginadmin
#admin=Admin.authenticate(params[:admin][:email], params[:admin][:password])
if #admin
session[:user_id]=#admin.id
cookies.signed[:user_id]=#admin.id
params[:admin][:remember_me] == '1' ? remember(#admin) : forget(#admin)
flash[:notice]="Login Successfull"
flash[:color]="valid"
redirect_to :action => "new", :controller => "admins"
else
flash[:notice]="Login Failed"
flash[:color]="invalid"
render 'index'
end
end
def removeuser
session[:user_id] = nil
cookies.delete :user_id
flash[:notice]="user logged out successfully"
flash[:color]="valid"
redirect_to :action => 'index', :controller => 'homes'
end
end
session_helper.rb
module SessionsHelper
def remember(admin)
admin.remember
cookies.permanent.signed[:user_id] = user.id
cookies.permanent[:remember_token] = user.remember_token
end
def forget(admin)
admin.forget
cookies.delete(:user_id)
cookies.delete(:remember_token)
end
end
model/admin.rb
class Admin < ActiveRecord::Base
attr_accessible :email, :password_hash, :password_salt, :picture, :user_name,:password_confirmation,:password, :remember_me
attr_accessor :password
before_save :encrypt_password
mount_uploader :picture, PictureUploader
EMAIL_REGEX = /\A[A-Z0-9._%+-]+#[A-Z0-9.-]+\.[A-Z]{2,4}\z/i
validates :email, :presence => true, :uniqueness => true, :format => EMAIL_REGEX
validates :user_name, :presence => true, :length => {:in => 3..10}
validates :password, :confirmation => true
validates_length_of :password, :in => 6..20, :on => :create
def encrypt_password
if password.present?
self.password_salt = BCrypt::Engine.generate_salt
self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
end
end
def self.authenticate(email, password)
user = find_by_email(email)
if user && user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
user
else
nil
end
end
end
As i am new to RoR please help me to solve this error and run this app successfully.
You must include the SessionsHelper in your SessionsController or move the remember and the forget method to the SessionsController.
I have a Rails 3.2.14 app where I have calls, calls have units, units have statuses, and calls times in the model such as in_service_time.
I'm trying to write a controller action called in_service which updates the unit's status to "In Service" and time stamps call.in_service_time to Time.zone.now and does all of this via put remote (Ajax).
What I've written so far seems to work by updating the unit status and time stamping the call.in_service_time. But using :remote => true doesn't render the partials as I've specified in the in_service action. I have to wait for the screen to refresh via a getScript call in my index.html.erb for the call status to update. If I use :remote => false it reloads the page immediately without problems. If I use the :remote => true I also throw an exception in my development.log for NihlClass.
Below are excerpts of the code in question, the full code can be found here to keep things easier to read: full code
index.html.erb
<div id="active">
<%= render "assigned_calls" %>
</div>
<div id="inactive">
<%= render "unassigned_calls" %>
</div>
<script>
$(function() {
setInterval(function(){
$.getScript("/calls").fail(function(jqxhr, settings, exception) {
window.location = "/users/sign_in?duplicate_session=true";
});
}, 10000);
});
</script>
index.js.erb
$("#active").html("<%= escape_javascript render("assigned_calls") %>");
$("#inactive").html("<%= escape_javascript render("unassigned_calls") %>");
routes.rb excerpt
resources :calls do
member do
post 'close'
post 'cancel'
post 'note'
get 'opencall'
get 'new_return'
get 'duplicate_call'
get 'edit_times'
put 'update_billing'
post 'dispatch_call'
put 'en_route'
put 'on_scene'
put 'to_hospital'
put 'at_hospital'
put 'in_service'
end
calls_controller.rb excerpt
def in_service
#call = Call.find(params[:id])
#unit = #call.units.first
#call.update_attributes(in_service_time: Time.zone.now)
#call.save
#unit.status = Status.find_by_unit_status("In Service")
#unit.save
respond_to do |format|
format.html { redirect_to calls_url }
format.js { render "index" }
end
end
_assigned_calls.html.erb
<div class="page-header">
<span class="badge badge-important"><%= #unassigned.count %></span> <strong>Unassigned calls</strong>
<span class="badge badge-info"><%= #assigned.count %></span> <strong>Active calls</strong>
<span class="badge badge-warning"><%= #scheduled.count %></span> <strong>Scheduled calls</strong>
<%= render "search" %>
<h2>Active Calls</h2>
</div>
<% #assigned.each do |call| %>
<div class="widget">
<div class="widget-header">
<div class="pull-right">
<%= link_to 'View', call, :class => 'btn btn-close'%>
<% if dispatch? %>
<%= link_to 'Edit', edit_call_path(call), :class => 'btn btn-close'%>
<%= link_to 'Close', close_call_path(call), confirm: 'Are you sure you want to close the call?', :method => :post, :class => 'btn btn-danger' %>
<%= link_to 'Cancel', cancel_call_path(call), confirm: 'Are you sure you want to cancel the call?', :method => :post, :class => 'btn btn-warning' %>
<% end %>
</div>
<i class="icon-phone"></i>
<h3><%= link_to call.incident_number, call %> <span><%= status(call) %></span></h3>
<% if call.traffic_type == "Emergency" %>
<span class="badge badge-important"><%= call.traffic_type %></span>
<% else %>
<span class="badge badge-info"><%= call.traffic_type %></span>
<% end %>
</div>
<div class="widget-content">
<div class="row">
<div class="span3">
<h4>Patient Name: <small><%= call.patient_name %></small></h4>
<div class="large-display">
<% if call.call_status == "open" %>
<div class="large <%= elapsed_overdue(call.elapsed_time) %>"><%= TimeFormatter.format_time(call.elapsed_time)%></div>
<div class="small">Elapsed Time</div>
<% else %>
<% if call.closed_at? %>
<div class="large <%= elapsed_overdue(call.run_time) %>"><%= TimeFormatter.format_time(call.run_time)%></div>
<div class="small">Run Time</div>
<% end %>
<% end %>
</div>
</div>
<div class="span2">
<address>
<strong><%= transferred_from(call) %></strong><br>
<%= transferred_from_address(call) %>
</address>
</div>
<div class="span1"><i class="icon-arrow-right dim"></i></div>
<div class="span2">
<address>
<strong><%= transferred_to(call) %></strong><br>
<%= transferred_to_address(call) %>
</address>
</div>
<div class="span3">
<% if call.service_level.level_of_service == "WC" %>
<div class="left-icon dim"><i class="icon-user"></i></div>
<% else %>
<div class="left-icon dim"><i class="icon-ambulance"></i></div>
<% end %>
Assigned to <strong>Unit <%= call.units.map(&:unit_name).join(", ") %></strong><br />
<% call.units.each do |unit| %>
<div class="<%= set_status(unit.status) %>"><%= unit_status(unit) %></div>
<% end %>
</div>
</div>
<hr />
<div class="row">
<div class="span2">
<div class="large-display">
<div class="medium <%= transfer_due(call.transfer_date) %>"><%= call.transfer_date.strftime("%m/%d/%y %H:%M") %></div>
<div class="small">Transfer Date</div>
</div>
</div>
<div class="span1">
<div class="large-display">
<div class="small"><%= call.nature.try(:determinant) %></div>
<div class="small">Nature</div>
</div>
</div>
<div class="span5">
<% if call.unit_ids.present? %>
<div class="large-display">
<div class="progress progress-striped"><%= progress_bar(call) %></div>
<div class="small"><%= call.units.first.status.unit_status %></div>
<div><%= link_to 'En Route', en_route_call_path(call), :class => 'btn btn-warning btn-medium', :method => :put, :remote => true %><%= link_to 'On Scene', on_scene_call_path(call), :class => 'btn btn-primary btn-medium', :method => :put, :remote => true %><%= link_to 'To Hospital', to_hospital_call_path(call), :class => 'btn btn-warning btn-medium', :method => :put, :remote => true %><%= link_to 'At Hospital', at_hospital_call_path(call), :class => 'btn btn-danger btn-medium', :method => :put, :remote => true %><%= link_to 'In Service', in_service_call_path(call), :class => 'btn btn-success btn-medium', :method => :put, :remote => true %></div>
<div>ER: <%= call.en_route_time.try(:strftime, "%m/%d/%y-%k:%M") %> OS: <%= call.on_scene_time.try(:strftime, "%m/%d/%y-%k:%M") %> TO: <%= call.to_hospital_time.try(:strftime, "%m/%d/%y-%k:%M") %> AT: <%= call.at_hospital_time.try(:strftime, "%m/%d/%y-%k:%M") %> IS: <%= call.in_service_time.try(:strftime, "%m/%d/%y-%k:%M") %></div>
</div>
<% end %>
</div>
<div class="span3">
<div class="left-icon dim"><i class="icon-user"></i></div>
<%= render partial: "medics_for_call", locals: {call: call} %>
</div>
</div>
</div>
</div>
<% end %>
development.log excerpt
NoMethodError - undefined method `count' for nil:NilClass:
app/views/calls/_assigned_calls.html.erb:2:in `_app_views_calls__assigned_calls_html_erb___2549181816739942207_70125964034780'
You're never setting #unassigned in your in_service action. So sending count to it throws an exception.
Rendering an action's view (render "index") from a different action does not execute the action's controller code.
EDIT: How to make it DRY:
class CallsController < ApplicationController
...
def index
setup_scheduling_variables
#units = Unit.order("unit_name")
#overdue = #assigned.select{|call| call.elapsed_time > 3600}
#inservice = Unit.in_service
end
def in_service
...
respond_to do |format|
format.html { redirect_to calls_url }
format.js do
setup_scheduling_variables
render "index"
end
end
end
private
def setup_scheduling_variables
#assigned = params[:search].present? ? Call.search(params[:search]) : Call.assigned_calls.until_end_of_day.order("transfer_date ASC")
#unassigned = Call.unassigned_calls.until_end_of_day
#scheduled = Call.scheduled_calls
end
I have some nested models in my Rails application.
i have an article hat has mny properties.
class Article < ActiveRecord::Base
has_many :properties, :dependent => :destroy
accepts_nested_attributes_for :properties
end
class Property < ActiveRecord::Base
belongs_to :article
end
And now i want to edit this in my View so I editet the controler
# GET /articles/new
# GET /articles/new.json
def new
#article = Article.new
3.times { #article.properties.build }
respond_to do |format|
format.html # new.html.erb
format.json { render json: #article }
end
end
And also edited the View and the _format.html.erb
<%= form_for(#article) do |f| %>
<% if #article.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(#article.errors.count, "error") %> prohibited this article from being saved:</h2>
<ul>
<% #article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :description %><br />
<%= f.text_area :description %>
</div>
<% f.fields_for :properties do |prop| %>
<div class="field">
<%= prop.label :name %><br />
<%= prop.text_field :name %>
</div>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
But there is no way to show up. If i want to create a new Model, i can not see any input fields for the properties.
What have i do wrong?
You're missing an = in your fields_for line. That is, it should be:
<%= f.fields_for :properties do |prop| %>