質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 3

Ruby on Rails3はRubyによって書かれたオープンソースのウェブフレームワークです。Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

1回答

2534閲覧

NoMethodError が表示されてしまいます。

Tomoaki_Fukuda

総合スコア75

Ruby on Rails 3

Ruby on Rails3はRubyによって書かれたオープンソースのウェブフレームワークです。Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/06/13 14:23

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
Ruby on railsにてイベント投稿機能を作成しております。
しかし、その際にeventsフォルダの中の「new.html.erb」にて下記のようなエラーが発生してしまいます。

この対処方法をご教示頂けないでしょうか?

###発生している問題・エラーメッセージ

NoMethodError in Events#new Showing /Users/TOMOAKI/Event/app/views/events/new.html.erb where line #24 raised: undefined method `:start_time' for #<Event:0x007fa64730ee78> Extracted source (around line #24): 22 23 24 25 26 27 <%= f.label :start_time %> <div> <%= f.datetime_select ':start_time', start_year: now.year, end_year: now.year + 1 %> </div> </div> <div class="form-group"> Rails.root: /Users/TOMOAKI/Event Application Trace | Framework Trace | Full Trace app/views/events/new.html.erb:24:in `block in _app_views_events_new_html_erb___3301007158387348171_70176067840640' app/views/events/new.html.erb:7:in `_app_views_events_new_html_erb___3301007158387348171_70176067840640' Request Parameters: Non

###Events>new.html.erb

ruby

1<% now = Time.zone.now %> 2 3<div class ="page-header"> 4<h1>イベント作成</h1> 5</div> 6 7<%= form_for(@event, class: 'form-horizontal',role:'form') do |f| %> 8<% if @event.errors.any? %> 9 <div class ="alert alert-danger"> 10 <ul> 11 <% @event.errors.full_messages.each do |msg| %> 12 <li><%= msg %></li> 13 <% end %> 14 </ul> 15 </div> 16 <% end %> 17<div class="form-group"> 18 <%= f.label :name %> 19 <%= f.text_field :name, class: 'form-control' %> 20</div> 21 <div class="form-group"> 22 <%= f.label :start_time %> 23 <div> 24 <%= f.datetime_select :start_time, start_year: now.year, end_year: now.year + 1 %> 25 </div> 26 </div> 27 <div class="form-group"> 28 <%= f.label :end_time %> 29 <div> 30 <%= f.datetime_select :end_time, start_year: now.year, end_year: now.year + 1 %> 31 </div> 32</div> 33<div class="form-group"> 34 <%= f.label :place %> 35 <%= f.text_field :place, class: 'form-control'%> 36 </div> 37 <div class="form-group"> 38 <%= f.label :content %> 39 <%= f.text_area :content, class: 'form-control',row:10 %> 40 </div> 41 <%= f.submit '作成', class: 'btn btn-default', data:{ disable_with:'作成中・・・'} %> 42<% end %> 43 44

###models>event.rb

ruby

1class Event < ActiveRecord::Base 2validates :name, length: { maximum:50}, presence: true 3validates :place, length: { maximum:100}, presence: true 4validates :content, length: { maximum:2000}, presence: true 5validates :start_time, presence: true 6validates :end_time, presence: true 7validates :start_time_should_be_before_end_time, presence: true 8 9private 10 11def start_time_should_be_before_end_time 12 return unless start_time && end_time 13 14 if start_time >= end_time 15 errors.add(:start_time,'は終了時間よりも前に設定してください') 16 end 17 end 18 19end 20

###Contollers>events_controller.rb

ruby

1class EventsController < ApplicationController 2 before_filter :authenticate_user! 3 before_action :set_event, only: [:show, :edit, :update, :destroy] 4 5 # GET /events 6 # GET /events.json 7 def index 8 @events = Event.all 9 end 10 11 # GET /events/1 12 # GET /events/1.json 13 def show 14 end 15 16 # GET /events/new 17 def new 18 @event = Event.new 19 end 20 21 # GET /events/1/edit 22 def edit 23 end 24 25 # POST /events 26 # POST /events.json 27 def create 28 @event = Event.new(event_params) 29 30 respond_to do |format| 31 if @event.save 32 format.html { redirect_to @event, notice: 'Event was successfully created.' } 33 format.json { render :show, status: :created, location: @event } 34 else 35 format.html { render :new } 36 format.json { render json: @event.errors, status: :unprocessable_entity } 37 end 38 end 39 end 40 41 # PATCH/PUT /events/1 42 # PATCH/PUT /events/1.json 43 def update 44 respond_to do |format| 45 if @event.update(event_params) 46 format.html { redirect_to @event, notice: 'Event was successfully updated.' } 47 format.json { render :show, status: :ok, location: @event } 48 else 49 format.html { render :edit } 50 format.json { render json: @event.errors, status: :unprocessable_entity } 51 end 52 end 53 end 54 55 # DELETE /events/1 56 # DELETE /events/1.json 57 def destroy 58 @event.destroy 59 respond_to do |format| 60 format.html { redirect_to events_url, notice: 'Event was successfully destroyed.' } 61 format.json { head :no_content } 62 end 63 end 64 65 private 66 # Use callbacks to share common setup or constraints between actions. 67 def set_event 68 @event = Event.find(params[:id]) 69 end 70 71 # Never trust parameters from the scary internet, only allow the white list through. 72 def event_params 73 params.require(:event).permit(:name, :start_time, :end_time, :place, :content, :participation_limit) 74 end 75end 76

###db>migrate>20160321133115_create_events.rb

ruby

1class CreateEvents < ActiveRecord::Migration 2 def change 3 create_table :events do |t| 4 t.integer :owner_id 5 t.string :name, null: false 6 t.datetime :start_time, null: false 7 t.datetime :end_time, null: false 8 t.string :place, null: false 9 t.text :content, null: false 10 t.integer :participation_limit 11 t.timestamps null: false 12 end 13 14 add_index :events, :owner_id 15 end 16end 17

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ビュー内の、:start_time のクォーテーションは不要では?

<%= f.datetime_select ':start_time', start_year: now.year, end_year: now.year + 1 %>

投稿2016/06/13 16:00

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tomoaki_Fukuda

2016/06/13 23:52

ご回答ありがとうございます。 ただ、クオーテーションを外しても同様のエラー(NoMethodError)が表示されてしまうのですが、原因はわかりますでしょうか?
退会済みユーザー

退会済みユーザー

2016/06/14 08:20

form内で、今日の日付から1年以内のみ選択可能にということでいいのであれば、以下で動くと思います。 <%= f.datetime_select :start_time, start_year: Date.today.year, end_year: Date.today.year + 1 %>
Tomoaki_Fukuda

2016/06/14 13:18

早速のアドヴァイス誠にありがとうございます。 ただ、上記記載頂いた「<%= f.datetime_select :start_time, start_year: Date.today.year, end_year: Date.today.year + 1 %>」でも下記のようなエラーが表示されます。 <表示されるエラー> NoMethodError in Events#new Showing /Users/TOMOAKI/Event/app/views/events/new.html.erb where line #24 raised: undefined method `start_time' for #<Event:0x007fa63d345f68>
Tomoaki_Fukuda

2016/06/14 13:20

以前からこのエラー表示と戦っているのですが、なかなか解決方法が見つからず・・・。 もし他に考えられる原因が思い当たればご教示頂けると本当に嬉しいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問