Reputation: 3136
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
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
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