2014-08-31 65 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 

答案控制器看起來李柯本:

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 2014-08-31 16:51:31

回答

2

,你得到的錯誤是因爲在控制器中正在使用的user變量,它是不定義。您想使用大寫模型名稱User

獲取用戶ID

如果這是一個登錄的用戶,那麼你可以通過查看會議得到他們的ID。通常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

非常感謝!它讓我更靠近了一步。它正在傳遞問題ID,但仍未找到用戶。該錯誤現在說:'ActiveModel :: MissingAttributeError在AnswersController#創建 不能寫未知屬性'user_id''。我把def current_user方法放在AnswersController中。那是正確的?謝謝! – MandyM 2014-08-31 17:17:05

+0

問題:你如何處理用戶登錄?用戶是否登錄? – Ahmed 2014-08-31 20:45:51

+0

是的,一切都通過設計來處理。在這一點上,它是全部開放的,但一旦我得到它的功能,我將添加限制,以便用戶只能在登錄時執行某些活動。 – MandyM 2014-08-31 22:36:45

相關問題