我如何使用form_for以便在控制器#create中使用params获取hidden_​​field值

时间:2016-08-29 09:59:06

标签: ruby-on-rails devise params form-for

我需要你的帮助。我需要current_user.id(我使用Devise gem)来articles#create。我希望通过form_forhidden field传递它。我写过:

<%= form_for :article, url: articles_path do |f| %>
  <p>
    <%= f.label :title %><br/>
    <%= f.text_field :title %>
  </p>

  <p>
    <%= f.label :text %><br/>
    <%= f.text_area :text %>
  </p>

  <p>
 # It's here
<%= f.hidden_field :user_id %> 

我有:

<input type="hidden" name="article[user_id]" id="article_user_id"/>

但我需要:

<input type="hidden" name="article[user_id]" id="article_user_id" value="2"/>

我在 new.html.erb

中编写了这个HTML代码
<input type="hidden" name="article[user_id]" id="article_user_id" value="<%= current_user.id%>"/>

和Active Record保存对象到数据库。我检查params,我没有看到我的隐藏值。  我想问你两个问题: 1.如何在hidden_field中撰写form_for? 2.如何获取文章#通过params创建此隐藏值?

2 个答案:

答案 0 :(得分:1)

我认为你想要的是:

<%= f.hidden_field :user_id, value: current_user.id %>

然后在您的控制器中(通常在article_params中)确保您允许user_id参数。

def article_params
  params.require(:article).permit(:user_id, :title, ...)
end

更好的方法是将其设置为服务器端,因为隐藏字段可以被操作..例如:

def create
  @article = current_user.articles.new(article_params)
  if @article.save
    # ...
  else
    # ...
  end
end

答案 1 :(得分:0)

使用设计,对于当前登录的用户,current_帮助程序可用。假设您的用户模型是“用户”#39;试试

<%= hidden_field_tag 'user_id', current_user.user_id %>