Rails -TypeError:无法将ActionController :: Parameters转换为文本 [英] Rails -TypeError: can't cast ActionController::Parameters to text

查看:60
本文介绍了Rails -TypeError:无法将ActionController :: Parameters转换为文本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用jQuery Preview开发一个网站,以获取任何链接的标题,描述或favction_url.

I'm developing a website using jQuery Preview to fetch the title, description or favction_url of any link.

jQuery预览: https://github.com/embedly/jquery-preview/

jQuery Preview: https://github.com/embedly/jquery-preview/

我的链接控制器具有以下代码:

class LinksController < ApplicationController
    before_action :find_link, :only => [:edit, :update, :destroy]

    def index
        @links = Link.all
    end

    def new
        @link = Link.new
    end

    def create
        @link = Link.new(:content => link_params, :title => params[:title], :description => params[:description], :favicon_url => params[:favicon_url])

        if @link.save
            redirect_to root_path
        else
            render :new
        end
    end

    def edit
    end

    def update

        if @link.update_attributes(link_params)
            redirect_to root_path
        else
            render :edit
        end
    end

    def destroy
        @link.destroy

        redirect_to root_path
    end

private

    def link_params
        params.require(:link).permit(:content)
    end

    def find_link
        @link = Link.find(params[:id])
    end
end

在我的 views/links/new.html.erb 中有以下代码:

<script>
    // Set up preview.
    $('#url').preview({key:'key'})

    // On submit add hidden inputs to the form.
    $('form').on('submit', function(){
      $(this).addInputs($('#url').data('preview'));
      return true;
    });
</script>

<h1>Share Link</h1>
<%= simple_form_for @link do |f| %>
    <%= f.input :content, :input_html => {:id => "url"} %>
    <div class="selector-wrapper"></div>
    <%= f.button :submit, :disable_with => "Submiting...", :class => "btn btn-primary btn-large" %>
<% end %>

但是当我单击提交"时,出现了错误:

But when I click submit, I got an error :

TypeError:无法将ActionController ::参数转换为文本:INSERT INTO链接"(内容","created_at",描述","favicon_url","title","updated_at") (?,?,?,?,?,?)

它标记了链接控制器代码的这一行:

And it marked this line of links controller code:

if @link.save

有人可以帮助我吗?谢谢.

Can anyone help me? Thank you.

我得到的参数如下,除了内容,其他参数来自jQuery Preview:

The parameters I got is like following, except content, others are from jQuery Preview:

Parameters: {"utf8"=>"✓", 

"authenticity_token"=>"NDqZbleBkEEZzshRlTM+d6GZdVEGAoO1W/mp7B68ZZ0=", 

"link"=>{"content"=>"http://stackoverflow.com/questions/20815513/rails-typeerror-cant-cast-actioncontrollerparameters-to-text/20815623?noredirect=1#20815623"}, 

"commit"=>"submit", 

"original_url"=>"http%3A//stackoverflow.com/questions/20815513/rails-typeerror-cant-cast-actioncontrollerparameters-to-text/20815623%3Fnoredirect%3D1%2320815623", 

"url"=>"http%3A//stackoverflow.com/questions/20815513/rails-typeerror-cant-cast-actioncontrollerparameters-to-text", 

"type"=>"html", 

"provider_url"=>"http%3A//stackoverflow.com", 

"provider_display"=>"stackoverflow.com", "provider_name"=>"Stackoverflow", 

"favicon_url"=>"http%3A//cdn.sstatic.net/stackoverflow/img/favicon.ico", 

"title"=>"Rails%20-TypeError%3A%20can%27t%20cast%20ActionController%3A%3AParameters%20to%20text", 

    "description"=>"I%27m%20developing%20a%20website%20using%20jQuery%20Preview%20to%20fetch%20the%20title%2C%20description%20or%20favction_url%20of%20any%20link.", 

"thumbnail_url"=>"http%3A//cdn.sstatic.net/stackoverflow/img/apple-touch-icon@2.png%3Fv%3Dfde65a5a78c6", 

"author_name"=>"", 

"author_url"=>"", 

"media_type"=>"", 

"media_html"=>"", 

"media_width"=>"", 

"media_height"=>""}

推荐答案

在您的create操作中,您尝试将link_params哈希值分配为需要文本的content的值.

In your create action you're trying to assign link_params hash as value for content which expects text.

通过调用Link.new(...)传递属性,您正在批量分配属性,而使用Rails4强大的参数,您需要将所有属性添加到要批量分配的permit列表中.

With the call to Link.new(...) passing in attributes you are mass assigning attributes, and with Rails4 strong parameters you need to add all the attributes to the permit list that you will be mass assigning.

如下更新createlink_params方法定义:

# app/controllers/links_controller.rb

def create
    @link = Link.new(link_params)

    if @link.save
        redirect_to root_path
    else
        render :new
    end
end

private

def link_params
    params.require(:link).permit(:content, :title, :description, :favicon_url)
end

更新:合并参数哈希中的某些属性并将其合并到params[:link]

Update: Merge certain attributes from the parameter hash and merge them to params[:link]

# app/controllers/links_controller

private

def link_params
  # Select parameters you need to merge
  params_to_merge = params.select { |k, v| ['title', 'description', 'favicon_url'].include?(k) }
  params.require(:link).permit(:content).merge(params_to_merge)
end

这篇关于Rails -TypeError:无法将ActionController :: Parameters转换为文本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆