2013-11-25 51 views
0

我有問題找到一個簡單的答案,我認爲這是一個非常簡單的問題。Ruby on Rails:使用文本框數據填充另一頁上的表單數據

我想要做的就是使用任何類型的文本字段搜索「主題」,然後將用戶重定向到正確的頁面以輸入有關該主題的某些信息。

因此,如果用戶輸入'1001',他將被帶到一個表格,該表格將被任何已經爲主題'1001'輸入的數據填充。

所以,我想這裏就是我想弄清楚:

假設只有一個變量將永遠被搜索,@ subject.subject_id。

如何從文本字段存儲變量,以便能夠將該變量傳遞到link_to字段,然後該字段將使用該主題信息填充整個頁面?

我添加了一個新的控制器元素與(populate_values)玩:

subjects_controller.rb

def update 
    @subject = Subject.find(params[:id]) 

    respond_to do |format| 
     if @subject.update_attributes(params[:subject]) 
     format.html { redirect_to @subject, notice: 'Subject was successfully updated.' } 
     format.json { head :no_content } 
     else 
     format.html { render action: "edit" } 
     format.json { render json: @subject.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

... 

    def populate_values 
    @subject_id = params[:subject_id] 
    redirect_to screening_path(@subject_id) 
    end 
end 

下面是我的一些航線代碼,請原諒我是一個小白 - 我米仍然搞清楚是什麼觸發了什麼。

的routes.rb

#resources :subjects, only: [:new, :create, :destroy] # Copied th 
    resources :subjects 

... 

match '/subjects', to: 'subjects#show' 
    match '/newsubject', to: 'subjects#new' 
    match '/subjects', to: 'subjects#index' 
    match '/showsubject', to: 'subjects#show' 
    match '/editsubject', to: 'subjects#edit' 
    match '/screening', to: 'subjects#screening' 
    #match '/populate_values', to: 'subjects#screening' #Just trying to figure out things. 

這裏是從哪裏值將由用戶輸入我的看法。我覺得無論我實際上做錯了什麼,最可能源於這種形式。此外,此表單位於用戶視圖內,而不是主題視圖,如果重要的話。

的意見/用戶/ show.html.erb

<% provide(:title, @user.name) %> 

<div class="row"> 
    <aside class="span4"> 
     <section> 
      <h1> 
       <%= gravatar_for @user %> 
       <%= @user.name %> 
      </h1> 
      <hr> 
     </section> 
     <div class="user_profile"> 
      <h2>Data Entry</h2> 
      <body> 
       <p><%= link_to "Add a new Patient", newsubject_path %></p> 
       <p><%= link_to "View Patients", subjects_path %></p> 
       <%= form_tag('/subjects_controller/populate_values') do %> 
        <%= text_field_tag 'subject_id' %> 
        <div class="btn btn-link"> 
         <%= submit_tag "Screening Log" %> 
        </div> 

       <% end %> 

      </body> 
     </div> 
    </aside> 
</div> 

任何幫助將不勝感激。

編輯1.

我目前正在

<%= link_to "Screening", screening_path, :subject_id => subject.subject_id, :class => 'btn btn-mini' %> 

但它不承認subject.subject_id瞎搞。 「未定義的局部變量或方法主題」。

+0

你的篩選路線不需要一個ID,但你的重定向傳入一個ID - redirect_to screening_path(@subject_id)我錯過了什麼?否則,您可以使用<%= f.text_field:subject_id,:value => params [:id] – fatfrog

回答

0

如果我的理解正確,您希望在「搜索」頁面上有一個鏈接,該鏈接將動態包含用戶剛輸入的主題ID作爲參數。

事情不這樣工作。您面臨的問題如下:當頁面加載時,搜索頁面上的實際鏈接存在,即在用戶輸入任何內容之前,它們無法鏈接到用戶輸入的任何內容。 當然可能有辦法做到這一點(例如與JavaScript),但在這裏,我想你只是想使用一種形式。

你會的,比如:

  • 在你的用戶的意見

    :搜索頁面包括將捕獲subject_id和你的主題控制器調用的動作形式,它傳遞這個subject_id

  • 在你的主題控制器中的這個動作可能是,例如,如果你使用了Rails腳手架功能,那麼這個動作將會響應你的主題視圖中可能存在的相應編輯視圖。它也可以是您創建的另一個控制器操作,並以您的主題視圖的特定視圖做出響應。

這個問題#1應該幫助你創建提交到另一個控制器= form_for but to post to a different action形式。

只需調整表格以將其掛接到您的主題控制器並將其放置在用戶視圖的搜索頁面中。

+0

來爲您的文本字段獲取參數ID,儘管我最終做了很多工作來解決問題。主要問題是我仍然不明白Rails框架的內部工作原理。所以,我閱讀了表格上的指南,並改變了一些東西。感謝您的答覆。 –

+0

謝謝伊恩。理解這一切肯定需要時間。我認爲自己在路徑的開始。然而,現在看來,如果還沒有完成,您將花費大量時間投入一些時間,確保您完全理解: - MVC(模型,視圖,控制器)框架以及爲什麼這3個元素是保持獨立, - 瀏覽器發出的HTTP請求會在您的應用中觸發,直到響應(路由 - >控制器/操作 - >視圖渲染) - 助手(您在視圖中使用助手以簡單的方式包含表單等元素並他們爲你生成html代碼)。 – Pierre

相關問題