[英]Rails -TypeError: can't cast ActionController::Parameters to text
我正在使用jQuery Preview開發一個網站,以獲取任何鏈接的標題,描述或favction_url。
jQuery預覽: 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 %>
但是,當我單擊提交時,出現錯誤:
TypeError:無法將ActionController :: Parameters轉換為文本:INSERT INTO“鏈接”(“內容”,“ created_at”,“描述”,“ favicon_url”,“標題”,“ updated_at”)值(?,?,? ,?,?,?)
並標記了這行鏈接控制器代碼:
if @link.save
誰能幫我? 謝謝。
我得到的參數如下所示,除了content ,其他參數來自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
值。
通過對傳遞屬性的Link.new(...)
的調用,您正在批量分配屬性,而使用Rails4強大的參數,您需要將所有屬性添加到將要批量分配的permit
列表中。
如下更新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]
# 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.