Я пытаюсь добавить скрытое поле в comments/_form
, чтобы имя пользователя появилось в разделе комментариев. Ничего я не работаю. Я действительно хочу использовать скрытое поле, поэтому я знаю, как заставить его работать.Как передать скрытое поле user_id для комментариев?
У пользователя есть много комментариев, и комментарии к ним принадлежат пользователю.
Это то, что я в настоящее время в comments/_form
:
<%= form_for([@place, @place.comments.build]) do |f| %>
<%= hidden_field :user_id, :value => @user.id %>
<p>
<%= f.label :body %><br>
<%= f.text_field :body %>
</p>
<p>
<%= f.submit %>
</p>
<% end %>
Это то, что я в настоящее время в _comment.html.erb
Пожалуйста, обратите внимание на comment.user.first_name
.
Это ошибка я получаю undefined method
first_name»для ноль: NilClass`:
<p>
<strong>Comment:</strong><br />
<%= comment.user.first_name %> wrote:<br /><br>
<%= comment.body %>
</p>
<p>
<%= link_to 'Destroy Comment', [comment.place, comment],
method: :delete,
data: { confirm: 'Are you sure?' } %>
</p>
Это то, что я имею в comments_controller
class CommentsController < ApplicationController
def create
@place = Place.find(params[:place_id])
@comment = @place.comments.create(comment_params)
redirect_to place_path(@place)
end
def destroy
@place = Place.find(params[:place_id])
@comment = @place.comments.find(params[:id])
@comment.destroy
redirect_to place_path(@place)
end
private
def comment_params
params.require(:comment).permit(:body, :user_id)
end
end
Это то, что я имею в ApplicationController
:
helper_method :current_user
private
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
У кого-нибудь есть совет?
EDIT Я добавляю еще пару вещей для назидания на случай, если это поможет.
Пользователи контроллер
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
redirect_to root_url, :notice => "Signed Up!"
else
render "new"
end
end
end
private
def user_params
params.require(:user).permit(:email, :password, :password_confirmation)
end
Сессии контроллер
class SessionsController < ApplicationController
def new
end
def create
user = User.authenticate(params[:email], params[:password])
if user
session[:user_id] = user.id
redirect_to places_path, :notice => "Logged in!"
else
flash.now.alert = "Invalid email or password"
render "new"
end
end
def destroy
session[:user_id] = nil
redirect_to root_url, :notice => "Logged out!"
end
end
мест контроллер
class PlacesController < ApplicationController
def index
@places = Place.all
end
def new
@place = Place.new
end
def create
@place = Place.new(place_params)
if @place.save
redirect_to @place
else
render 'new'
end
end
def show
@place = Place.find(params[:id])
end
def edit
@place = Place.find(params[:id])
end
def update
@place = Place.find(params[:id])
if @article.update(place_params)
redirect_to @place
else
render 'edit'
end
end
def destroy
@place = Place.find(params[:id])
@place.destroy
redirect_to places_path
end
end
private
def place_params
params.require(:place).permit(:name, :location)
end
Привет @Rajesh Omanakuttan, спасибо за то, что нашли время, чтобы ответить. Я реализовал то, что вы предложили в своем ответе, т. Е. Удалив скрытое поле и добавив то, что вы предложили в методе создания выше. Оставил все остальное неповрежденным. Я все еще получаю сообщение об ошибке. Это либо пустое имя, но как минимум сообщение и комментарий появляются ИЛИ Я получаю этот 'undefined method' first_name 'для nil: NilClass'. Любые идеи, почему это происходит? – user273072545345
Странно, я просто попробовал '<% = comment.user.email%>' в '_comment.html.erb', и он показывает адрес электронной почты в некоторых сообщениях или эту ошибку' undefined method 'email 'для nil: NilClass '. Но дело в том, что он показывает адрес электронной почты! Почему это делается для этого, но не для имени? Извините, просто для уточнения, это с измененным кодом, как указано в комментарии выше. – user273072545345
Я думаю его '@ комментарий', а не' комментарий'. –