如何使用表单设置cookie

时间:2017-05-13 13:29:23

标签: ruby-on-rails ruby cookies

我不知道如何使用cookie实现简单的CRUD。

第一个问题:放什么代替@user?我只有这个: 我的表格:

<%= simple_form_for @user do |f| %>
  <%= f.input :first_name %>
  <%= f.input :last_name %>
  <%= f.input :date_of_birth %>
  <%= f.input :phone_number %>
  <%= f.button :submit %>
<% end %>

下一个问题:如何正确地将值从表单字段发送到cookies []。 之前我只使用了params方法(例如clients_params)和实例变量。

  def create
    cookies[:first_name] = params[:first_name]
    cookies[:last_name] = params[:last_name]
    cookies[:date_of_birth] = params[:date_of_birth]
    cookies[:phone_number] = params[:phone_number]

    redirect_to 'clients/show'
  end

  def show
    @first_name = cookies[:first_name]
    @last_name = cookies[:last_name]
    @date_of_birth = cookies[:date_of_birth]
    @phone_number = cookies[:phone_number]
  end

我找不到任何关于cookie以及如何使用它们的好教程。

1 个答案:

答案 0 :(得分:3)

查看simple_form的文档,特别是关于如何将ERB编译为HTML的示例:

simple_form_for @user do |f|
  f.input_field :name
  f.input_field :remember_me, as: :boolean
end

变为

<form>
  ...
  <input class="string required" id="user_name" maxlength="255" name="user[name]" size="255" type="text">
  <input name="user[remember_me]" type="hidden" value="0">
  <label class="checkbox">
    <input class="boolean optional" id="user_published" name="user[remember_me]" type="checkbox" value="1">
  </label>
</form>

注意f.input_field :name成为<input name="user[remember_me]" type="hidden" value="0">

的方式

name="user[remember_me]"部分很重要,因为name属性决定了如何在rails中读取参数。如果它只是name='remember_me',那么params[:remember_me]可以工作,但这是使用一些特殊的语法来嵌套对象。传入的参数将为params[:user][:remember_me]

总之,在控制器中使用params[:user][<param_name>]而不只是params[<param_name>]

使用secure-params方法也有帮助,例如:

def user_params
  params.require(:user).permit(:remember_me, :name, etc)
end

# in controller
cookies[:name] = user_params[:name]