Ruby on Rails:隐藏字段值不插入数据库

时间:2014-02-15 23:47:50

标签: ruby-on-rails ruby ruby-on-rails-3 debugging ruby-on-rails-3.2

我有两个hidden_​​fields,user_idskill_id

<%= form_for @skill do |s| %>
  <%= s.label :image, "Upload your skill" %>
  <%= s.hidden_field :user_id, value: current_user.id %>
  <%= s.hidden_field :skill_id, value: params[:id] %>
  <%= s.file_field :image, multiple: true %>
<% end %>

在我的控制器中我有这个:

def reviews
  @skill = Skill.new
end  

我可以将skill_id的值输入到我的数据库中,但是我无法从user_id获取值。在我的rails控制台中,我看到user_id正在通过“技能”传递,但不会显示在我的数据库中。

Parameters: {"utf8"=>"✓", "authenticity_token"=>"5+wxS929uxtt..", "skill"=>{"user_id"=>"7", "skill_id"=>"132", ...

我甚至检查过我是否获得<%= current_user.id %>的任何价值,我是。

也许有人可以指导我在调试此问题时走上正确的道路。

由于

2 个答案:

答案 0 :(得分:1)

<%= form_for @skill do |s| %>
   <%= s.label :image, "Upload your skill" %>
   <%= s.hidden_field :user_id, value: current_user.id %>
   <%= s.hidden_field :skill_id, value: params[:id] %>
   <%= s.file_field :image, multiple: true %>
<% end %>

这将转到创建动作

所以你真正想要的是更新现有的,因为你传递了现有的技能id

def reviews
  @skill = Skill.find params[:id]
end

现在您的表单可以使用此

<%= form_for @skill do |s| %>
   <%= s.label :image, "Upload your skill" %>
   <%= s.hidden_field :user_id, value: current_user.id %>
   <%= s.file_field :image, multiple: true %>
<% end %>

现在转到控制器中的更新操作。

def update
  @skill = Skill.find params[:id]
  @skill.update_attributes params[:skill]
  redirect_to root_path # redirect to somewhere
end

试试这个。

答案 1 :(得分:1)

你需要一个看起来像这样的创建控制器:

def create
  @skill = Skill.new(params[:skill])
  if @skill.save
    # Handle a successful save.
  else
    render 'new'
  end
end

您可能希望将def reviews控制器的名称更改为def new,并将新路线添加到config/routes.rb