2014-08-31 3 views
0

ОБНОВЛЕНИЕ: Похоже, что ошибка, вероятно, была вызвана конфликтом разработки. Я использовал какой-то контент из другого приложения, которое, по-видимому, сделало утилизацию устаревшей и не сможет читать сеансы пользователя. Я начну с чистой установки и вижу, если мне повезет больше. Благодаря!Рельсы, передающие данные скрытой формы через контроллер

Я создаю страницу, на которой есть один вопрос. На этой странице у меня есть форма, где люди могут ответить на этот вопрос. В самой форме есть блок ответа и кнопка отправки. Однако я хочу связать его как с пользователем, представляющим форму, так и с вопросом, на который связан ответ. Для безопасности я хочу сделать это в контроллере, а не в представлении. Форма ответа отображается на странице # вопросов вопросов. В настоящее время я получаю следующее сообщение об ошибке:

undefined method `user' for #<AnswersController:0x007fe618e5cc10> 

Я подозреваю, что если он сделал это в прошлом пользователя я хотел бы получить то же самое для «вопроса»

вопросов # Индекса выглядит следующим образом:

<div class="home_question"> 
    <h1><%= @daily.question %></h1> 

    <div class="answer_form"> 
     <%= form_for @answer do |answer| %> 
      <%= answer.label :answer, "What do you think?" %> 
      <%= answer.text_area :answer %> 

      <%= answer.button %> 
     <% end %> 

    </div> 
</div> 

Вопросы, контроллер выглядит следующим образом:

def index 
    @daily = Question.find_by(show_month: Time.now.month, show_day: Time.now.day) 
    @answer = Answer.new 
end 

ответы контроллер выглядит Li ка это:

def index 
    @answers = Answer.all 
    @answer = Answer.new 
end 

def new 
    @answer = Answer.new 
end 

def create 
    @answer = Answer.new(answer_params) 
    @user = user(params[:id]) 
    @question = question(params[:id]) 

    if @answer.save 
    redirect_to root 
    else 
    render 'new' 
    end 
end 

private 

def answer_params 
    params.require(:answer).permit(:answer, :users_id, :questions_id) 
end 

Данные в настоящее время передается по форме:

{"utf8"=>"✓", 
"authenticity_token"=>"mA16+dg7+Edzxvu/FVWR5r8PZ9zdNaOyvOwSz1VpOXU=", 
"answer"=>{"answer"=>"test"}, 
"button"=>""} 
+2

, что 'пользователь (PARAMS [: ID]) и' вопрос (PARAMS [: ID]) ' ?? – IS04

ответ

2

ошибка, что вы получаете, потому что в контроллере вы используете переменную user, которая не является определены. Вы хотите использовать прописную букву User.

Получение идентификатора пользователя

Если это зарегистрированный пользователь, то вы можете получить их идентификатор, посмотрев на сессии. Обычно Rails приложение будет иметь помощник, как это:

def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
end 

Вам не нужен этот помощник, если вы используете изобрести - это уже сделано за вас.

Получение вопрос ID

Сначала убедитесь, что ваши соответствующие ресурсы вложены. Так что в нашем routes.rb файле:

resources :questions do 
    resources :answers 
end 

Это означает, что для создания ответа мы должны POST /questions/:id/answers.

изменения формы, чтобы:

<%= form_for [@daily, @answer] do |answer| %> 
    <%= answer.label :answer, "What do you think?" %> 
    <%= answer.text_area :answer %> 
    <%= answer.button %> 
<% end %> 

и в контроллере:

def create 
    @answer = Answer.new(answer_params) 
    @answer.user = current_user 
    @answer.question = Question.find(params[:id]) 

    if @answer.save 
    redirect_to root 
    else 
    render 'new' 
    end 
end 
+0

спасибо за это! Он сделал меня на один шаг ближе. Он передает идентификатор вопроса, но не находит пользователя.Ошибка теперь говорит: «ActiveModel :: MissingAttributeError в AnswersController # create не может записать неизвестный атрибут 'user_id' '. Я поместил метод def current_user в AnswerController. Это было правильно? Благодаря! – MandyM

+0

Вопрос: как вы обрабатываете логин пользователя? Могут ли пользователи войти в систему? – Ahmed

+0

Да, все обрабатывается через устройство. На данный момент это все открыто, но как только я получу его работу, я добавлю ограничения, чтобы пользователи могли выполнять определенные действия во время входа в систему. – MandyM

Смежные вопросы