2017-07-21 142 views
-1

我这里有一个表格:如何修复Rails拒绝从表单发送的参数?

<%= 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 %> 

这形式使用隐藏字段发送用户信息的组合控制器。当时的投资组合创建方法用于

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

截图3210

Rails期待我以某种方式发送当前用户模型作为参数吗?这是说这是一种不匹配的类型,但我不确定在何处为预期参数设置“类型”。

回答

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)

0

代码的问题在于期望用户对象的强参数。你有没有在数据库中的任何列用户作为属性名称。如果你有一个名为用户组合表中的列,那么你的代码应该工作正常。不过,我猜测投资组合是否与用户表有关联,那么投资组合必须在其表中有user_id的属性。因此,使用user_id作为名称而不是用户并传递一个整数值。不要忘记允许user_id也具有强大的参数。