0

I can't find what I did wrong here, is there something I'm missing?

My new action/view here:

<h1>Submit a new experiment here!</h1>

<%= render "form" %>

My _form.html.erb form partial

<h1>THis is a form</h1>

<%= form_for(@experiment) do |f| %>
  <div class="field">
    <%= f.label :title %><br />
    <%= f.text_field :title %>
  </div>
  <div class="field">
    <%= f.label :description %><br />
    <%= f.text_field :description %>
  </div>
  <div class="field">
    <%= f.label :plan %><br />
    <%= f.text_field :plan %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

My experiments controller:

class ExperimentController < ApplicationController

    def index
    end

    def new
    @experiment = Experiment.new
    end

end

And my routes:

  devise_for :users
  resources :home
  resources :experiment

  root to: "home#index"

I am visiting the following url:

http://localhost:3000/experiment/new
user3408293
  • 1,377
  • 6
  • 18
  • 26

1 Answers1

0

In you want to follow rails convention then:

  1. Rename your controller from ExperimentController to ExperimentsController, i.e plural Experiments.
  2. Rename your controller file name app/controllers/experiment_controller.rb to app/controllers/experiments_controller.rb, i.e. plural experiments_controller.rb.
  3. Update your routes by modifying resources :experiment to resources :experiments.

If not, update your form_for call as:

<%= form_for(@experiment, url: url_for(controller: 'experiment', action: 'create')) do |f| %>
  ...
<% end %>
vee
  • 38,255
  • 7
  • 74
  • 78
  • I tried this and now I am getting a routing error that reads "uninitialized constant ExperimentsController" – user3408293 Mar 24 '14 at 00:23
  • Your file name should also be changed to `app/controllers/experiments_controller.rb` from `app/controllers/experiment_controller.rb`. – vee Mar 24 '14 at 00:25
  • @user3408293, I've edited my answer to include the file name change. – vee Mar 24 '14 at 00:26
  • I changed this and also changes the view/experiment to view/experiments file name. Now I am getting an unitialized constant ExperimentsController#new on the line in my controller that says @experiment = Experiments.new Any idea whats going on? – user3408293 Mar 24 '14 at 00:36
  • Fixed it just changed my experiments controller line from [at]experiment = Experiments.new to [at]experiment = Experiment.new – user3408293 Mar 24 '14 at 00:44
  • I think you're confusing yourself, the `Experiment` in `@experiment = Experiment.new` is the model class. You are creating a new model class of type `Experiment` in `ExperimentsController`'s new action. So change that line back to `@experiment = Experiment.new`. – vee Mar 24 '14 at 00:44
  • Thanks you, that last comment really cleared up some misunderstandings – user3408293 Mar 24 '14 at 02:29