Rails -TypeError:无法将ActionController :: Parameters转换为文本 [英] Rails -TypeError: can't cast ActionController::Parameters to text
问题描述
我正在使用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.
如下更新create
和link_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屋!