да, есть лучшие способы
сначала смотрим на ваш контроллер. сохранять реферер и перенаправлять его назад не имеет смысла (по крайней мере, вы НЕ должны сохранять это в сеансе), рельсы могут делать это с ключом: назад.
в секунду вам не нужно делать varaible с @, потому что вы не используете созданный объект. а также вам не нужно сохранять результат. просто сделай
class CommentsController < ApplicationController
def create
Comment.create(:user=>current_user, :issue_id=>params[:issue_id],:content=> params[:content])
redirect_to :back
end
end
++ edit
на самом деле лучший способ это сделать так:
class CommentsController < ApplicationController
def create
current_user.comments.create(issue_id: params[:issue_id], content: params[:content])
redirect_to :back
end
end
просто используйте рельсовые ассоциации
- редактировать
и, как вы думаете, ДА, мы можем изменить Issue_id и написать комментарии к любой проблеме, которую я хочу. так что если вы хотите защититься от этого, вы должны сделать помощник, прежде чем написать комментарий (это всего лишь пример)
class CommentsController < ApplicationController
def create
issue = Issue.find(params[:issue_id]
if issue.is_locked? || current_user.cant_write_at_issue(issue)
return redirect_to :back, :notice=>"You dont have Privilegs"
end
issue.comments.create :user=>current_user, :content=>params[:content])
redirect_to :back :notice=>"Comment was created successfully"
end
end
is_locked и cant_write_at_issue, которые вы должны определить в своих моделях. это просто способ как-то защитить.
так что теперь мы можем изменить идентификатор проблемы, но вы посмотрите, есть ли у пользователя доступ для этого: -)