簡體   English   中英

在Rails 4上通過ruby中的link_to方法傳遞參數

[英]passing parameters through link_to method in ruby on rails 4

我有一個索引視圖,顯示所有可用的類,我想要一個鏈接以“注冊課程”,該鏈接將我重定向到“注冊”表單並填寫其他一些值,並且在創建注冊時將其保存為填滿了我剛剛通過方法鏈接傳遞的類的外鍵

類索引:

<h1>Listof classes</h1>

<table>
  <thead>
    <tr>
      <th>id</th>
      <th>Name</th>
      <th>Description</th>
      <th>Actions</th>
    </tr>
  </thead>
  <tbody>
    <% @classes.each do |class| %>
      <tr>
        <td><%= class.id %></td>
        <td><%= class.name %></td>
        <td><%= class.description %></td>
        <td><%= link_to 'sign up!', new_sign_up_path(:class_id => class.id), method: :post %></td> 
      </tr>
    <% end %>
  </tbody>
</table>

sign_up控制器:

class SignUpsCOntroller < ApplicationController
  before_action :set_sign_ups, only: [:show, :edit, :update, :destroy]

  # GET /sign_ups/new
  def new
    @sign_up = SignUp.new
  end

    def set_sign_ups
      @sign_up = SignUp.find(params[:id])
    end

    def sign_up_params
      params.require(:sign_up).permit(:date, :status, :type, :class_id)
    end
end

和我的注冊表格:

<%= form_for(@sign_up) do |f| %>

  <div class="field">
    <%= f.label :date %><br>
    <%= f.date_select :date %>
  </div>
  <div class="field">
    <%= f.label :status %><br>
    <%= f.check_box :status %>
  </div>
  <div class="field">
    <%= f.label :type %><br>
    <%= f.number_field :type %>
  </div>
    <div class="field">
    <%= f.hidden_field :class_id %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

當我保存它時,它不會保存class_id ...我嘗試將其解析為整數,但我嘗試了不使用隱藏字段的情況,但始終將其作為空白en保存...有什么想法嗎?

您只是在link_to params[:class_id]帶有額外參數的params[:class_id] 但是,您的表單適用於具有class_id屬性的對象,因此它期望您的@sign_up對象具有class_id屬性。

基本上,你的new動作,您需要設置@sign_upclass_id從參數吧:

def new
  @sign_up = SignUp.new
  @sign_up.class_id = params[:class_id] if params.has_key?(:class_id)
end

這會將class_id設置為從link_to url傳入的參數。

然后您的表單應該可以正常工作,因為f.hidden_field將查看class_id@sign_up的當前值,並將其設置為輸入值。 到現在為止還沒有保存它沒關系form_for將使用未保存的狀態來填充輸入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM