Welcome to the Treehouse Community
Want to collaborate on code errors? Have bugs you need feedback on? Looking for an extra set of eyes on your latest project? Get support with fellow developers, designers, and programmers of all backgrounds and skill levels here with the Treehouse Community! While you're at it, check out some resources Treehouse students have shared here.
Looking to learn something new?
Treehouse offers a seven day free trial for new students. Get access to thousands of hours of content and join thousands of Treehouse students and alumni in the community today.
Start your free trialMurat KAYA
10,127 PointsRails Belongs To User association
I just want to show the username who crated the events.But When I try it says undefined method `user_name' for nil:NilClass
This is my event.rb
class Event < ActiveRecord::Base
belongs_to :user
validates :name, presence: true
validates :description, presence: true, length: {minimum: 5}
end
And this is my user.rb
class User < ActiveRecord::Base
has_secure_password
has_many :events
end
And I am trying to show the user name in html.erb file like this.
<%= event.user.user_name %>
But I am getting this error.
So this is my create method in events_controller
def create
@event = current_user.events.new(event_params)
respond_to do |format|
if @event.save
format.html { redirect_to @event, notice: 'Event was successfully created.' }
else
format.html { render :new }
end
end
end
So what should I do for showing username in that page.
Thank You
2 Answers
Andrew Stelmach
12,583 PointsCan you post up your schema?
You also may not have the correct controller method yet. You have only shown the create
method, which is NOT typically used to render a view. In a typical Rails CRUD app you will have a 'show' view which corresponds to a 'show' method in a controller.
For example, in my Yelp clone app, I have a Restaurants controller. When I want to look at a particular Restaurant in the app, I would go to a Restaurant's 'show' view, which corresponds to the 'show' method in the Restaurants controller. There, an instance variable, @restaurant
is created which is then accessible in the view:
Restaurants Controller:
class RestaurantsController < ApplicationController
before_action :authenticate_user!, :except => [:index, :show]
def index
@restaurants = Restaurant.all
end
def show
@restaurant = Restaurant.find(params[:id])
end
def new
@restaurant = Restaurant.new
end
def create
@restaurant = current_user.restaurants.new(restaurant_params)
if @restaurant.save
redirect_to restaurants_path
else
render 'new'
end
end
def edit
@restaurant = Restaurant.find(params[:id])
end
def update
@restaurant = Restaurant.find(params[:id])
if @restaurant.update_as(current_user, restaurant_params)
redirect_to restaurants_path
flash[:notice] = "Restaurant successfully updated"
else
redirect_to restaurants_path
flash[:notice] = "You cannot edit someone else's restaurant"
end
end
def destroy
@restaurant = Restaurant.find(params[:id])
if @restaurant.delete_as(current_user)
redirect_to restaurants_path
flash[:notice] = "Restaurant successfully deleted"
else
redirect_to restaurants_path
flash[:notice] = "You cannot delete someone else's restaurant"
end
end
private
def restaurant_params
params.require(:restaurant).permit(:name, :image)
end
end
app/views/restaurants/show.html.erb:
<p><%= @restaurant.name %></p>
<p><%= @restaurant.description %></p>
Have a scout around here to look at the full code: https://github.com/Yorkshireman/yelp_clone
You might need to provide more detail here to get the answer you need. Please do!
Murat KAYA
10,127 PointsActually I figured out problem with this line
<%= event.user.try(:user_name) %>
Thank You