我在这里有一个表格:
<%= form_for(portfolio) do |f| %>
<% if portfolio.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(portfolio.errors.count, "error") %> prohibited this portfolio from being saved:</h2>
<ul>
<% portfolio.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<%= f.hidden_field :user, value: @user[0]['user_id']%>
<div class="field">
<%= f.label :name %>
<%= f.text_field :name %>
</div>
<div class='field'>
<%= f.label :balance %>
<%= f.number_field :balance %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
该表单使用隐藏字段将用户信息发送到Portfolio控制器。那时使用了Portfolio create方法
def create
@portfolio = Portfolio.new(portfolio_params)
respond_to do |format|
if @portfolio.save
format.html { redirect_to @portfolio, notice: 'Portfolio was successfully created.' }
format.json { render :show, status: :created, location: @portfolio }
else
format.html { render :new }
format.json { render json: @portfolio.errors, status: :unprocessable_entity }
end
end
end
它运行我在控制器中定义的参数测试:
def portfolio_params
params.require(:portfolio).permit(:user, :name, :balance)
end
当我尝试使用该表单创建新的投资组合时,我收到以下错误消息: 用户(#70102221612560)预期,得到字符串(#46914422996540)
这是错误的屏幕截图 Rails error
Rails是否希望我以某种方式将当前用户模型作为参数发送?它说这是一种不匹配的类型,但我不确定在哪里设置预期参数的“类型”。
答案 0 :(得分:0)
您需要更改表单:
<%= f.hidden_field :user, value: @user[0]['user_id']%>
为:
<%= f.hidden_field :user_id, value: @user[0]['user_id']%>
并在您的控制器中:
params.require(:portfolio).permit(:user_id, :name, :balance)
答案 1 :(得分:0)
代码的问题在于期望用户对象的强参数。在数据库中是否有任何列,用户作为属性名称。如果在投资组合表中有一个名为user的列,那么您的代码应该可以正常工作。但是,我猜测投资组合是否与用户表有关联,那么投资组合必须在其表中具有属性application.js
。因此,使用user_id
作为名称而不是用户,并传递整数值。不要忘记在强参数中允许user_id
。