Saghir A. Khatri
Saghir A. Khatri

Reputation: 3136

can't convert symbol into string ruby on rails

I am stuck in very weird problem. I have 2 models User and Supplier. User can add many suppliers so here is how my model looks like. here is my User model

class User < ActiveRecord::Base
.
.
.
     has_many :suppliers, dependent: :destroy

     def Supplier_feed
         Supplier.where("user_id = ?", id)
     end
end

My supplier model is like

class Supplier < ActiveRecord::Base
    set_primary_key :id 

  belongs_to :user
  default_scope -> { order('created_at DESC') }
  validates :supplier, presence: true, length: { maximum: 140 }
  validates :user_id, presence: true
end

My controller looks like

class SuppliersController < ApplicationController
   before_filter :signed_in_user, only: [:index, :edit, :update, :destroy]


  def index
    @user=current_user
    @supplier = current_user.suppliers.paginate(page: params[:page])
  end

  def new
    @supplier=Supplier.new
  end


  def create
    @supplier = current_user.suppliers.build(supplier_params)
    if @supplier.save
      flash[:success] = "Supplier created!"
      redirect_to root_url
    else
      @supplier_feed_items = []
      render 'users/home'
    end
  end

  def destroy
  end

  private

      def supplier_params
      params.require(:suppliers).permit(:supplier)
    end
end

When i try to add some supplier i get the error

 TypeError in SuppliersController#create

can't convert Symbol into String

Here is how my form looks like.

<%= form_for :suppliers, :url => {:action => "create"} do |f| %>

  <div class="field">
    <%= f.text_area :supplier, placeholder: "Add new Supplier..." %>
  </div>
  <%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>

As i am new to RoR i am, unable to figure out what wrong i have done. Please guide me to proper direction. Thanks in advance

Edit My application Trace is like

app/controllers/suppliers_controller.rb:32:in `supplier_params'
app/controllers/suppliers_controller.rb:16:in `create'

This error occurred while loading the following files:
   supplier

My request parameters are

{"utf8"=>"✓",
 "authenticity_token"=>"1op5Kkh6EXO+wsR9TmAY1SW3ZIUNYcrodbJ9lfpJjck=",
 "suppliers"=>{"supplier"=>"abc"},
 "commit"=>"Post"}

Here is my Add supplier form.

<%= form_for :suppliers, :url => {:action => "create"} do |f| %> 
  <div class="field">
    <%= f.text_area :supplier, placeholder: "Add new Supplier..." %>
  </div>
  <%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>

I am using partial. so here is my view suppliers

<div class="span8">
    <% if @user.suppliers.any? %>
      <h3>Suppliers (<%= @user.suppliers.count %>)</h3>
      <ol class="supplierss">
        <%= render @supplier %>
      </ol>
      <%= will_paginate @supplier %>
    <% end %>
  </div>

here is my _Suppliers.html.erb

<li>
  <span class="content"><%= supplier.supplier %></span>
  </span>
</li>

Upvotes: 0

Views: 4516

Answers (2)

Vijay Chouhan
Vijay Chouhan

Reputation: 4893

This is typo error in view

You have used

def new
   @supplier=Supplier.new
end

And in view you have used

<%= form_for :suppliers, :url => {:action => "create"} do |f| %>

in the view :suppliers must be supplier delete s from suppliers

Please use

def new
  @supplier=Supplier.new
end

<%= form_for :supplier, :url => {:action => "create"} do |f| %>

  <div class="field">
    <%= f.text_area :supplier, placeholder: "Add new Supplier..." %>
  </div>
  <%= f.submit "Post", class: "btn btn-large btn-primary" %>
<% end %>

Upvotes: 1

techvineet
techvineet

Reputation: 5111

You create a form like this

<%= form_for @supplier do |f| %>

and in controller

def create

@supplier = current_user.suppliers.build(params[:supplier])

Upvotes: 0

Related Questions