Ruby on Rails:使用文本框数据在另一个页面上填充表单数据

时间:2013-11-25 22:01:50

标签: ruby-on-rails forms post activerecord auto-populate

我遇到的问题是找到一个简单的答案,我认为这是一个非常简单的问题。

我想要做的就是使用任何类型的文本字段搜索“主题”,然后将用户重定向到正确的页面以输入有关该主题的一些信息。

因此,如果用户输入“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。 “未定义的局部变量或方法主题”。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望在“搜索”页面上有一个链接,该链接会动态地包含用户刚刚输入的主题ID作为参数。

事情不会这样。您面临的问题如下:搜索页面上的实际链接是在加载页面时,即在用户输入任何内容之前,因此无法链接到用户输入的任何内容。 当然有办法可以做到这一点(例如使用javascript),但在这里,我认为你只想使用表格。

例如:

    用户视图中的
  • :搜索页面,其中包含一个表单,该表单将捕获subject_id并在主题控制器中调用操作,并将此主题传递给subject_id

  • 主题控制器中的此操作可以是,例如,更新操作,如果您使用Rails脚手架功能,它将使用主题视图中可能存在的相应编辑视图进行响应。它也可以是您创建的另一个控制器操作,并使用主题视图中的特定视图进行响应。

此Stackoverflow问题应该可以帮助您创建提交给另一个控制器的表单= form_for but to post to a different action

只需调整表单以将其挂钩到主题控制器,然后将其放在用户视图的搜索页面中。