我有两个hidden_fields,user_id
和skill_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 %>
的任何价值,我是。
也许有人可以指导我在调试此问题时走上正确的道路。
由于
答案 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