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

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

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

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

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

Q&A

解決済

3回答

620閲覧

Rails 編集ボタンを投稿したユーザーのときのみだけ表示させたい

K_T_T_K

総合スコア231

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails 4

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

0グッド

0クリップ

投稿2015/01/04 14:40

Rails 編集ボタンを投稿したユーザーのときのみだけ表示させたいのですが、以下のように書くとエラーが出てしまいます。

app/views/events/show.html.erb

lang

1<div class="col-md-4"> 2 <% if @event.created_by?(current_user) %> 3 <%= link_to 'イベントを編集する', edit_event_path(@event), class: 'btn btn-info btn-lg btn-block' %> 4 <% end %> 5</div>

app/models/event.rb

lang

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

エラーがでるので、app/views/events/show.html.erbは

lang

1<div class="col-md-4"> 2 <% # if @event.created_by?(current_user) %> 3 <%= link_to 'イベントを編集する', edit_event_path(@event), class: 'btn btn-info btn-lg btn-block' %> 4 <% # end %> 5</div>

と記述しています。

編集ボタンを投稿したユーザーのときのみだけ表示させたいのですが、どうすればの良いでしょうか?

![イメージ説明]WIDTH:600

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

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

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

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

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

guest

回答3

0

ベストアンサー

たぶん、Railsパーフェクトガイドのawesome_eventを作っているのかなと思います。

エラーから、current_userが定義されていないとでているので、application_controller.rb に helper_method :current_user, :logged_in? が定義されていないのでしょうか。

helper_method はコントローラー内のメソッドをビューでも使えるようにするメソッドです。

lang

1# app/controllers/application_controller.rb 2class ApplicationController < ActionController::Base 3 # Prevent CSRF attacks by raising an exception. 4 # For APIs, you may want to use :null_session instead. 5 protect_from_forgery with: :exception 6 7 ###### ここ!!! ###### 8 helper_method :current_user, :logged_in? 9 ###### ここ!!! ###### 10 11 private 12 13 def current_user 14 return unless session[:user_id] 15 @current_user ||= User.find session[:user_id] 16 end 17 18 def logged_in? 19 !!session[:user_id] 20 end 21 22 def authenticate 23 return if logged_in? 24 redirect_to root_path, alert: 'ログインしてください' 25 end 26end

投稿2015/01/05 16:25

shoji

総合スコア85

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

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

K_T_T_K

2015/01/06 01:02

回答ありがとうございます。 そうです、Railsパーフェクトを読み進めています。 無事解決できました! 原因は、helper_method current_userが定義されていないエラーでした。 > helper_method はコントローラー内のメソッドをビューでも使えるようにするメソッド ありがとうございました。勉強になりました。
guest

0

event controllerのdef create

@event = current_user.events.build(event_params)を追加してみたらどうでしょう?

投稿2015/01/05 06:15

smith

総合スコア73

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

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

K_T_T_K

2015/01/05 07:34

追加してみたのですが、エラー文言は同じでした。。 現在は、 @event = current_user.created_vents.build(event_params) と記述しています。
guest

0

エラーの文言があればありがたいです。

投稿2015/01/05 03:41

smith

総合スコア73

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

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

K_T_T_K

2015/01/05 05:33

回答ありがとうございます。 projects/awesome_events/app/views/events/show.html.erb where line #54 raised: undefined local variable or method `current_user' for #<#<Class:0x007fe389e459c0>:0x007fe38860a5e0> とのことでした。 また、54行目というのは質問にある画像にあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問