控制器操作 respond_to 格式错误 ActionController::UnknownFormat
Controller action respond_to format error ActionController::UnknownFormat
我在 rails 应用的 Ruby 中遇到控制器操作响应问题。
因此,我的 taskasset_controller 中有两个简单代码的操作:
def destroy
if params[:id].present?
@asset = TaskAsset.find(params[:id])
authorize @asset, :destroy?
@asset.destroy
respond_to do |format|
format.js { @asset.id }
end
end
end
def create
@task = Task.find(params[:task_id])
authorize @task
respond_to do |format|
if params[:images]
params[:images].each { |image|
@task.task_assets.create(image: image)
}
end
@task_assets = @task.task_assets
authorize @task_assets, :create?
format.js { @task_assets }
end
end
我还定期创建了两个表单 destroy.js.erb 和 create.js.erb 并且在我从表单中删除图像时破坏的情况下我得到了已删除图像的响应 ID 以便我用来隐藏模态的信息图片预览。
但是在创建操作的情况下,我收到以下错误:
ActionController::UnknownFormat
Extracted source (around line #14):
authorize @task
respond_to do |format|
if params[:images]
params[:images].each { |image|
@task.task_assets.create(image: image)
在创建操作响应格式的情况下我缺少什么?
这可能与您在 respond_to
块内执行某些操作而没有先调用 format.[your_format]
有关。
尝试将您的代码更改为
respond_to do |format|
format.js do
if params[:images]
params[:images].each { |image|
@task.task_assets.create(image: image)
}
end
@task_assets = @task.task_assets
authorize @task_assets, :create?
render @task_assets
end
end
或其他选项
if params[:images]
params[:images].each do |image|
@task.task_assets.create(image: image)
end
end
@task_assets = @task.task_assets
authorize @task_assets, :create?
respond_to do |format|
format.js { @task_assets }
end
关键是你在 respond_to do |format| ... end
中唯一能做的就是调用一个或多个 format.[some_format]{ what_to_do }
查看 documentation 了解更多信息
所以我的解决方案是:
**<script src="http://malsup.github.com/jquery.form.js"></script>**
**<%= form_for TaskAsset.new, url: task_assets_path(format: :js),remote: true, :html => {remote: true, :multipart => true,id: 'ajaxformtask' } do |form| %>**
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
<%= hidden_field_tag 'task_id', task.id %>
<div class="form-group">
<div class="col-md-12">
<label>Select Images</label>
</div>
<%= file_field_tag "images[]", id: "imageUploadInput", type: :file, multiple: true, class:'form-control display-block' %>
</div>
<div class="actions">
<div class="padding-bottom-3x text-center">
<button type="button" id="cancel-add-task-assets" class="btn btn-lg btn-warning">Cancel</button>
<%= form.submit "Save", id:"add-task-assets", class: 'btn btn-lg task-btn-color' %>
</div>
</div>
<% end %>
**<script>
$(document).ready(function(){
$("#ajaxformtask").ajaxForm()
})
</script>**
- 添加脚本:
http://malsup.github.com/jquery.form.js
到
这里的项目只是我们将其放在局部视图中的示例。
添加表单 ID 名称和(格式::js)
{偏僻的:
真,:multipart => 真,id: 'ajaxformtask' } 做|形式| %>
添加:
$(文档).ready(函数(){
$("#ajaxformtask").ajaxForm() })
这也是创建控制器操作的最终外观:
def create
@task = Task.find(params[:task_id])
#@task = policy_scope(@venue.tasks).find(params[:task_id]).decorate
#authorize @task
if params[:images]
params[:images].each do |image|
@task.task_assets.create(image: image)
end
end
@task_assets = @task.task_assets
authorize @task_assets, :create?
@result = [@task_assets, @venue]
respond_to do |format|
format.json { @task_asset.to_json }
format.js{ @result }
#format.js {render js: 'alert("success")'} # now you cann append that image to te image list here or create create.js.erb ...ok I have that alreday let try
end
end
我在 rails 应用的 Ruby 中遇到控制器操作响应问题。
因此,我的 taskasset_controller 中有两个简单代码的操作:
def destroy
if params[:id].present?
@asset = TaskAsset.find(params[:id])
authorize @asset, :destroy?
@asset.destroy
respond_to do |format|
format.js { @asset.id }
end
end
end
def create
@task = Task.find(params[:task_id])
authorize @task
respond_to do |format|
if params[:images]
params[:images].each { |image|
@task.task_assets.create(image: image)
}
end
@task_assets = @task.task_assets
authorize @task_assets, :create?
format.js { @task_assets }
end
end
我还定期创建了两个表单 destroy.js.erb 和 create.js.erb 并且在我从表单中删除图像时破坏的情况下我得到了已删除图像的响应 ID 以便我用来隐藏模态的信息图片预览。
但是在创建操作的情况下,我收到以下错误:
ActionController::UnknownFormat
Extracted source (around line #14):
authorize @task
respond_to do |format|
if params[:images]
params[:images].each { |image|
@task.task_assets.create(image: image)
在创建操作响应格式的情况下我缺少什么?
这可能与您在 respond_to
块内执行某些操作而没有先调用 format.[your_format]
有关。
尝试将您的代码更改为
respond_to do |format|
format.js do
if params[:images]
params[:images].each { |image|
@task.task_assets.create(image: image)
}
end
@task_assets = @task.task_assets
authorize @task_assets, :create?
render @task_assets
end
end
或其他选项
if params[:images]
params[:images].each do |image|
@task.task_assets.create(image: image)
end
end
@task_assets = @task.task_assets
authorize @task_assets, :create?
respond_to do |format|
format.js { @task_assets }
end
关键是你在 respond_to do |format| ... end
中唯一能做的就是调用一个或多个 format.[some_format]{ what_to_do }
查看 documentation 了解更多信息
所以我的解决方案是:
**<script src="http://malsup.github.com/jquery.form.js"></script>**
**<%= form_for TaskAsset.new, url: task_assets_path(format: :js),remote: true, :html => {remote: true, :multipart => true,id: 'ajaxformtask' } do |form| %>**
<%= hidden_field_tag :authenticity_token, form_authenticity_token %>
<%= hidden_field_tag 'task_id', task.id %>
<div class="form-group">
<div class="col-md-12">
<label>Select Images</label>
</div>
<%= file_field_tag "images[]", id: "imageUploadInput", type: :file, multiple: true, class:'form-control display-block' %>
</div>
<div class="actions">
<div class="padding-bottom-3x text-center">
<button type="button" id="cancel-add-task-assets" class="btn btn-lg btn-warning">Cancel</button>
<%= form.submit "Save", id:"add-task-assets", class: 'btn btn-lg task-btn-color' %>
</div>
</div>
<% end %>
**<script>
$(document).ready(function(){
$("#ajaxformtask").ajaxForm()
})
</script>**
- 添加脚本:
http://malsup.github.com/jquery.form.js
到 这里的项目只是我们将其放在局部视图中的示例。 添加表单 ID 名称和(格式::js)
{偏僻的: 真,:multipart => 真,id: 'ajaxformtask' } 做|形式| %>添加:
$(文档).ready(函数(){ $("#ajaxformtask").ajaxForm() })
这也是创建控制器操作的最终外观:
def create
@task = Task.find(params[:task_id])
#@task = policy_scope(@venue.tasks).find(params[:task_id]).decorate
#authorize @task
if params[:images]
params[:images].each do |image|
@task.task_assets.create(image: image)
end
end
@task_assets = @task.task_assets
authorize @task_assets, :create?
@result = [@task_assets, @venue]
respond_to do |format|
format.json { @task_asset.to_json }
format.js{ @result }
#format.js {render js: 'alert("success")'} # now you cann append that image to te image list here or create create.js.erb ...ok I have that alreday let try
end
end