I am trying to CRUD my rails app and I am stuck. The form displays at /pins/new but after hitting submit I run into this ERROR.
Let me know if more files are required to solve this. It is saying that there is an undefined method 'resource_type' but I don't have a method by that name and is where I am confused. Been stuck on this for a couple days. Have googled a bunch and tried out various solutions with no luck. Please help. I appreciate you.
Getting ERROR
undefined method `resource_type' for # Did you mean? restore_text!
Github can be found at https://github.com/dustin-longenecker/rails-pinning-app The last commit is before adding the get / post routes for creating a new pin.
Pointed at pins_controller.rb LINE 21 in the #CREATE method
class PinsController < ApplicationController
def index
@pins = Pin.all
end
def show
@pin = Pin.find(params[:id])
end
def show_by_name
@pin = Pin.find_by_slug(params[:slug])
render :show
end
def new
@pin = Pin.new
end
def create
@pin = Pin.create(pin_params)
redirect :show
end
private
def pin_params
params.require(:pin).permit(:title, :url, :slug, :text, :category_id)
end
end
routes.rb
root 'pins#index'
#get "pins/name-:slug" => "pins#show_by_name"
get "pins/name-:slug" => "pins#show_by_name", as: 'pin_by_name'
resources :pins
get "library" => "pins#index"
get "/pins/new" => "pins#new"
post "/pins" => "pins#create"
new.html.erb
<%= form_for @pin do |f| %>
<div class="form-group">
<label for="pin_title">Title</label>
<%= f.text_field(:title, class: "form-control") %>
</div>
<div class="form-group">
<label for="pin_url">URL</label>
<%= f.url_field(:url, class: "form-control") %>
</div>
<div class="form-group">
<label for="pin_text">Description</label>
<%= f.text_area(:text, class: "form-control") %>
</div>
<div class="form-group">
<label for="pin_category_id">Category</label>
<%= f.collection_select(:category_id, Category.all, :id, :name, class: "form-control") %>
</div>
<div class="form-group">
<%= f.submit(class: "btn btn-default")%>
</div>
<% end %>
MODEL pin.rb
class Pin < ActiveRecord::Base
validates_presence_of :title, :url, :slug, :text, :resource_type
validates_uniqueness_of :slug
belongs_to :category
end
MODEL category.rb
class Category < ActiveRecord::Base
has_many :pins
end
Migration create_category.rb
class CreateCategories < ActiveRecord::Migration[4.2]
def change
create_table :categories do |t|
t.string :name
end
add_column :pins, :category_id, :integer, references: :categories
add_index :pins, :category_id
if Category.all.empty?
Category.create(name: "ruby")
Category.create(name: "rails")
Category.create(name: "unknown")
end
unknown_category = Category.find_by_name("unknown")
pins = Pin.where("category_id is null")
pins.each do |pin|
category = Category.find_by_name(pin.resource_type)
if category.present?
pin.category_id = category.id
else
pin.category_id = unknown_category.id
end
pin.save
end
if Pin.where("category_id is null").empty?
remove_column :pins, :resource_type
puts "MIGRATION SUCCESSFUL!"
puts "All your data has been migrated successfully."
else
puts "ERROR! Something went wrong - not all pins have been assigned a category Id."
end
end
end
ERROR STACK
activemodel (5.2.2) lib/active_model/attribute_methods.rb:430:in `method_missing'
activemodel (5.2.2) lib/active_model/validator.rb:150:in `block in validate'
activemodel (5.2.2) lib/active_model/validator.rb:149:in `each'
activemodel (5.2.2) lib/active_model/validator.rb:149:in `validate'
activesupport (5.2.2) lib/active_support/callbacks.rb:426:in `block in make_lambda'
activesupport (5.2.2) lib/active_support/callbacks.rb:198:in `block (2 levels) in halting'
activesupport (5.2.2) lib/active_support/callbacks.rb:606:in `block (2 levels) in default_terminator'
activesupport (5.2.2) lib/active_support/callbacks.rb:605:in `catch'
activesupport (5.2.2) lib/active_support/callbacks.rb:605:in `block in default_terminator'
activesupport (5.2.2) lib/active_support/callbacks.rb:199:in `block in halting'
activesupport (5.2.2) lib/active_support/callbacks.rb:513:in `block in invoke_before'
activesupport (5.2.2) lib/active_support/callbacks.rb:513:in `each'
activesupport (5.2.2) lib/active_support/callbacks.rb:513:in `invoke_before'
activesupport (5.2.2) lib/active_support/callbacks.rb:131:in `run_callbacks'
activesupport (5.2.2) lib/active_support/callbacks.rb:816:in `_run_validate_callbacks'
activemodel (5.2.2) lib/active_model/validations.rb:409:in `run_validations!'
activemodel (5.2.2) lib/active_model/validations/callbacks.rb:118:in `block in run_validations!'
activesupport (5.2.2) lib/active_support/callbacks.rb:98:in `run_callbacks'
activesupport (5.2.2) lib/active_support/callbacks.rb:816:in `_run_validation_callbacks'
activemodel (5.2.2) lib/active_model/validations/callbacks.rb:118:in `run_validations!'
activemodel (5.2.2) lib/active_model/validations.rb:339:in `valid?'
activerecord (5.2.2) lib/active_record/validations.rb:67:in `valid?'
activerecord (5.2.2) lib/active_record/validations.rb:84:in `perform_validations'
activerecord (5.2.2) lib/active_record/validations.rb:46:in `save'
activerecord (5.2.2) lib/active_record/transactions.rb:310:in `block (2 levels) in save'
activerecord (5.2.2) lib/active_record/transactions.rb:387:in `block in with_transaction_returning_status'
activerecord (5.2.2) lib/active_record/connection_adapters/abstract/database_statements.rb:259:in `block in transaction'
activerecord (5.2.2) lib/active_record/connection_adapters/abstract/transaction.rb:239:in `block in within_new_transaction'
/Users/dl/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0/monitor.rb:230:in `mon_synchronize'
activerecord (5.2.2) lib/active_record/connection_adapters/abstract/transaction.rb:236:in `within_new_transaction'
activerecord (5.2.2) lib/active_record/connection_adapters/abstract/database_statements.rb:259:in `transaction'
activerecord (5.2.2) lib/active_record/transactions.rb:212:in `transaction'
activerecord (5.2.2) lib/active_record/transactions.rb:385:in `with_transaction_returning_status'
activerecord (5.2.2) lib/active_record/transactions.rb:310:in `block in save'
activerecord (5.2.2) lib/active_record/transactions.rb:325:in `rollback_active_record_state!'
activerecord (5.2.2) lib/active_record/transactions.rb:309:in `save'
activerecord (5.2.2) lib/active_record/suppressor.rb:44:in `save'
activerecord (5.2.2) lib/active_record/persistence.rb:36:in `create'
app/controllers/pins_controller.rb:21:in `create'
actionpack (5.2.2) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
actionpack (5.2.2) lib/abstract_controller/base.rb:194:in `process_action'
actionpack (5.2.2) lib/action_controller/metal/rendering.rb:30:in `process_action'
actionpack (5.2.2) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
activesupport (5.2.2) lib/active_support/callbacks.rb:132:in `run_callbacks'
actionpack (5.2.2) lib/abstract_controller/callbacks.rb:41:in `process_action'
actionpack (5.2.2) lib/action_controller/metal/rescue.rb:22:in `process_action'
actionpack (5.2.2) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
activesupport (5.2.2) lib/active_support/notifications.rb:168:in `block in instrument'
activesupport (5.2.2) lib/active_support/notifications/instrumenter.rb:23:in `instrument'
activesupport (5.2.2) lib/active_support/notifications.rb:168:in `instrument'
actionpack (5.2.2) lib/action_controller/metal/instrumentation.rb:32:in `process_action'
actionpack (5.2.2) lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
activerecord (5.2.2) lib/active_record/railties/controller_runtime.rb:24:in `process_action'
actionpack (5.2.2) lib/abstract_controller/base.rb:134:in `process'
actionview (5.2.2) lib/action_view/rendering.rb:32:in `process'
actionpack (5.2.2) lib/action_controller/metal.rb:191:in `dispatch'
actionpack (5.2.2) lib/action_controller/metal.rb:252:in `dispatch'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:34:in `serve'
actionpack (5.2.2) lib/action_dispatch/journey/router.rb:52:in `block in serve'
actionpack (5.2.2) lib/action_dispatch/journey/router.rb:35:in `each'
actionpack (5.2.2) lib/action_dispatch/journey/router.rb:35:in `serve'
actionpack (5.2.2) lib/action_dispatch/routing/route_set.rb:840:in `call'
rack (2.2.2) lib/rack/tempfile_reaper.rb:15:in `call'
rack (2.2.2) lib/rack/etag.rb:27:in `call'
rack (2.2.2) lib/rack/conditional_get.rb:40:in `call'
rack (2.2.2) lib/rack/head.rb:12:in `call'
actionpack (5.2.2) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
rack (2.2.2) lib/rack/session/abstract/id.rb:266:in `context'
rack (2.2.2) lib/rack/session/abstract/id.rb:260:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/cookies.rb:670:in `call'
activerecord (5.2.2) lib/active_record/migration.rb:559:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (5.2.2) lib/active_support/callbacks.rb:98:in `run_callbacks'
actionpack (5.2.2) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
web-console (3.7.0) lib/web_console/middleware.rb:135:in `call_app'
web-console (3.7.0) lib/web_console/middleware.rb:30:in `block in call'
web-console (3.7.0) lib/web_console/middleware.rb:20:in `catch'
web-console (3.7.0) lib/web_console/middleware.rb:20:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
railties (5.2.2) lib/rails/rack/logger.rb:38:in `call_app'
railties (5.2.2) lib/rails/rack/logger.rb:26:in `block in call'
activesupport (5.2.2) lib/active_support/tagged_logging.rb:71:in `block in tagged'
activesupport (5.2.2) lib/active_support/tagged_logging.rb:28:in `tagged'
activesupport (5.2.2) lib/active_support/tagged_logging.rb:71:in `tagged'
railties (5.2.2) lib/rails/rack/logger.rb:26:in `call'
sprockets-rails (3.2.1) lib/sprockets/rails/quiet_assets.rb:13:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/request_id.rb:27:in `call'
rack (2.2.2) lib/rack/method_override.rb:24:in `call'
rack (2.2.2) lib/rack/runtime.rb:22:in `call'
activesupport (5.2.2) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/executor.rb:14:in `call'
actionpack (5.2.2) lib/action_dispatch/middleware/static.rb:127:in `call'
rack (2.2.2) lib/rack/sendfile.rb:110:in `call'
railties (5.2.2) lib/rails/engine.rb:524:in `call'
puma (4.3.3) lib/puma/configuration.rb:228:in `call'
puma (4.3.3) lib/puma/server.rb:682:in `handle_request'
puma (4.3.3) lib/puma/server.rb:472:in `process_client'
puma (4.3.3) lib/puma/server.rb:328:in `block in run'
puma (4.3.3) lib/puma/thread_pool.rb:134:in `block in spawn_thread'
You have a validation that references resource_type
:
class Pin < ActiveRecord::Base
validates_presence_of :title, :url, :slug, :text, :resource_type # its right here!
validates_uniqueness_of :slug
belongs_to :category
end
If you actually meant to have it then you need to add the column to the database with a migration.
And that's not how you create a resource.
class PinsController < ApplicationController
# ...
# POST /pins
def create
@pin = Pin.new(pin_params)
if @pin.save
redirect_to @pin
else
render :new
end
end
# ...
end
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.