【问题标题】:passing parameters through link_to method in ruby on rails 4通过 ruby​​ on rails 4 中的 link_to 方法传递参数
【发布时间】:2015-04-22 19:37:26
【问题描述】:

我有一个显示所有可用课程的索引视图我填写的值加上我刚刚通过链接传递给方法的类的外键

类索引:

<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>

注册控制器:

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...我尝试将其解析为整数我尝试过不使用隐藏字段但它总是将其作为空白保存...有什么想法吗?

【问题讨论】:

  • 将变量命名为 class 以外的名称 - 这是 Ruby 中的保留字。
  • 第二。如果您开始命名变量classtype,您将进入一个痛苦的世界。
  • 它们实际上被称为不同,因为我的代码是西班牙语,我在发布内容时会更改它
  • 你知道哈希进入你的控制器时是什么吗?要准确查看哪些参数和相关值来自您的表单,您可以在控制器操作中添加调试警报以显示哈希值。代码是 flash[:info] = "Hash: #{params}" 我发现这很有帮助。

标签: ruby-on-rails ruby ruby-on-rails-4 parameters link-to


【解决方案1】:

您只是在params[:class_id] 上传递了link_to 上的额外参数。但是,您的表单适用于具有 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 将查看@sign_upclass_id 的当前值并将其设置为输入值。此时您尚未保存它并不重要 - form_for 将使用未保存的状态来填充输入。

【讨论】:

  • 我现在甚至不确定@daw_inscripcion 的来源。这个表格真的应该是@sign_up吗?
  • 是的,是的,抱歉,只是我的代码是西班牙语,我在发布抱歉的内容时会更改它
  • 德纳达(恐怕你不会比我更西班牙语!)
  • jajaja 虽然 xD 是一个好的开始......现在我编辑了这个问题,你看到解决方案了吗?
  • 你能解释一下为什么有has_key吗?它有什么作用?它将如何解决?呵呵只是好奇
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2012-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多