使用Ruby on Rails无法获取表单字段到数据库的麻烦

时间:2018-06-21 17:50:59

标签: ruby-on-rails ruby ruby-on-rails-5

我是Ruby / RoR的新手,到目前为止一切都很顺利,但是我在从表单字段更新数据库时遇到了问题(除生日字段外,每个字段都保存)。我认为这里存在一个较小的实现问题,但是我很难解决。

表格:

    <%= f.label :birthday %>
    <%= f.date_select :birthday, {order: [:month, :day, :year], prompt: { day: 'Select day', month: 'Select month', year: 'Select year' }, start_year: Date.today.year - 118, end_year: Date.today.year}, class: 'form-control' %>

用户模型:

    def update 
      @user = User.find(params[:id])
      if @user.update_attributes(user_params) 
        flash[:success] = "Profile updated"
        redirect_to @user
      else 
        render 'edit'
      end
    end

    def user_params
      unless logged_in?
        params.require(:user).permit(:first_name, :last_name, :email, :usertype, :password,:password_confirmation)
      else 
        params.require(:user).permit(:first_name, :last_name, :email, :password, :password_confirmation, :street, :city, :state, :zipcode,  :phone_number, :birthday, :month, :day, :year)
      end
    end

字段的数据库迁移

    add_column :users, :birthday, :date
    add_column :users, :month, :date
    add_column :users, :day, :date
    add_column :users, :year, :date

1 个答案:

答案 0 :(得分:1)

当您有if((ScheduledTask-Exists($taskname))){ Write-Output "$taskname already exists" } else{ $run = (Get-Date).AddMinutes(2) Register-ScheduledTask -TaskPath $taskpath -TaskName $taskname -InputObject ( ( New-ScheduledTask -Action $action -Trigger $trigger -Settings $setting ) | %{ $_.Triggers[0].EndBoundary = $run.AddMinutes(30).ToString('s') ; $_} ) Write-Output "Creating Scheduled Task - $taskName" } 字段时,它将创建可以在Ruby attr_accessor的上下文中实例化的虚拟属性,但不会映射到数据库字段。

在您的情况下,由于您拥有数据库字段object,并且使用相同的名称创建了虚拟属性,因此在birthday调用中,该属性仍分配给虚拟属性,而不分配给生成的数据库字段通过ActiveRecord。因此,您的对象没有保存。

如果您在数据库中没有相应的字段,但想在对象上具有属性,例如“ first_name update last_name attr_accessor full_name`,通常使用rails代码中的

and

此外,在Rails的上下文中,, where database hasattr_accessor不同。后期通常用于将用于属性分配的参数列入白名单;在新版本的Rails(正在使用)中,它被Strong-parameters取代

希望它会有所帮助:)

编辑:正在搜索是否有人问过这个问题。找到了这个,认为这对您也有帮助-https://stackoverflow.com/a/4735726/1376448