控制器中的Rails 4功能未运行

迈兰·康诺利

我有一些正在处理的Rails 4项目的代码。它使用active_record(mysql2),并且has_many :through当我进行交互时rails c(在生产或开发中),有一种关系可以正常工作当我尝试以表单形式提交关系时(我正在使用simple_form),我似乎无法保存它。

这是我目前的信息设置方式(仅显示摘要,我无法真正显示全部源代码):

模型:

has_many :categorizations
has_many :resource_categories, through: :categorizations

accepts_nested_attributes_for :resource_categories
accepts_nested_attributes_for :categorizations

形式:

= simple_form_for @resource do |f|
  = f.association :resource_categories

控制器:

# POST /resources
# POST /resources.json
def create
  @resource = Resource.new(resource_params)
  set_categories(@resource, params[:resource][:resource_category_ids])

  respond_to do |format|
    if @resource.save
      format.html {
        redirect_to @resource, notice: 'Resource was successfully created.'
      }
      format.json {
        render action: 'show', status: :created, location: @resource
      }
    else
      format.html {
        render action: 'new'
      }
      format.json {
        render json: @resource.errors, status: :unprocessable_entity
      }
    end
  end
end

# PATCH/PUT /resources/1
# PATCH/PUT /resources/1.json
def update
  respond_to do |format|
    if @resource.update(resource_params)
      set_categories(@resource, params[:resource][:resource_category_ids])
      format.html {
        redirect_to @resource, notice: 'Resource was successfully updated.'
      }
      format.json {
        head :no_content
      }
    else
      format.html {
        render action: 'edit'
      }
      format.json {
        render json: @resource.errors, status: :unprocessable_entity
      }
    end
  end
end

# Never trust parameters from the scary internet, only allow the white list
# through.
def resource_params
  params.require(:resource).permit(
    :title, :slug, :ancestry, :status, :author_id, :published, :parent_id,
    :resource_category_ids, :preview, :body
  )
end

def set_categories(resource, categories)

  # Clean out the existing categories (if there are any)
  unless resource.resource_categories.blank?
    resource.resource_categories.each do |category|
      resource.resource_categories.delete(category)
    end
  end

  unless categories.blank?
    categories.each do |category|
      unless category.blank?
        resource.resource_categories << ResourceCategory.find(category)
      end
    end
  end
end

当我使用rails c -e production(或仅使用rails c发出以下命令时,它可以工作(在本示例中,我将所有类别分配给所有资源):

Resource.all.each do |resource|
  ResourceCategory.all.each do |category|
    resource.resource_categories << category
  end
end

看来我的问题是控制器未调用辅助函数

柯蒂·索拉特(Kirti Thorat)

改用这个:

def create
  @resource = Resource.new(resource_params)    
  @resource.set_categories(params[:resource][:resource_category_ids])
  ..
end 

Resource模型中移动方法

def set_categories(categories)

  # Clean out the existing categories (if there are any)
  unless new_record?
    unless resource_categories.blank?
      resource_categories.each do |category|
        resource_categories.delete(category)
      end
    end
  end

  unless categories.blank?
    categories.each do |category|
      unless category.blank?
        resource_categories << ResourceCategory.find(category)
      end
    end
  end
end

@resource是Controller的实例变量,则无需将其传递给方法。直接在实例变量上执行所有操作。

OP仍然有问题,同时保存记录,改:resource_category_ids:resource_category_ids => []resource_params方法:

def resource_params 
params.require(:resource).permit( 
:title, :slug, :ancestry, :status, :author_id, :published, :parent_id, 
 :preview, :body, :resource_category_ids => [] 
) 
end

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Rails 4中的控制器注销

来自分类Dev

从Rails 4中的控制器注销

来自分类Dev

角度控制器功能未运行

来自分类Dev

在Rails 4中的控制器中添加验证错误

来自分类Dev

控制器中的功能未命中

来自分类Dev

控制器Rails中的未初始化常量

来自分类Dev

在 ruby on rails 中从控制器运行 mysql 查询

来自分类Dev

Rails4控制器#create中的ActiveModel :: MissingAttributeError

来自分类Dev

如何在Rails 4中测试控制器问题

来自分类Dev

Rails 4在单独的控制器中搜索多个模型

来自分类Dev

在Rails 4中翻译控制器action_name

来自分类Dev

从Rails 4中的任何控制器渲染不同的视图

来自分类Dev

如何在Rails 4中测试控制器问题

来自分类Dev

Rails 4在单独的控制器中搜索多个模型

来自分类Dev

如何找到在Rails 4中定义的控制器方法?

来自分类Dev

指令链接功能未运行,但模板、控制器运行

来自分类Dev

我可以在Rails 4中从当前控制器渲染另一个控制器的动作吗?

来自分类Dev

rails 4控制器名称空间

来自分类Dev

Rails 4范围模型/控制器

来自分类Dev

Rails 4测试控制器故障

来自分类Dev

连接下拉列表以在控制器中运行功能

来自分类Dev

从Rails 4中的其他控制器/视图将数据保存在表中

来自分类Dev

在指令中调用控制器功能

来自分类Dev

控制器功能中的$ resource内部

来自分类Dev

在指令中扩展控制器功能

来自分类Dev

Extbase控制器中的正常功能

来自分类Dev

在Rails中,为控制器和模型放置有用功能的位置

来自分类Dev

Rails控制器过滤器在Ruby中具有什么语言功能?

来自分类Dev

Rails中的管理员/用户名称空间控制器的功能是什么

Related 相关文章

热门标签

归档