rails 4在helper中创建记录

时间:2015-11-12 16:44:30

标签: ruby-on-rails

在Rails 4应用程序中,我想有一个按钮,可以为用户添加新的默认记录。

优先级/ index.html.erb中的按钮:

<%= button_to "Add Default Values", :helper => "default_priorities" %>

helpers / priority_helper.rb中的代码

module PrioritiesHelper
  def default_priorities
    Priority.create("prioritycode"=>"3 Low")
    Priority.create("prioritycode"=>"2 Medium")
    Priority.create("prioritycode"=>"1 High")
  end
end

我得到的错误:

param is missing or the value is empty: priority

控制器行获取错误:

  params.require(:priority).permit(:user_id, :prioritycode, :description, :prioritynumber)

1 个答案:

答案 0 :(得分:1)

很难推荐最佳解决方案,却不知道您想要实现的目标。你绝对应该避免在帮助器中创建记录(它不是MVC)。

我可能会在你的 PrioritiesController 上创建一个动作:

def create_default

  # Grab the user you want
  @user = User.find(params[:user_id])

  # Create the priories through the association
  @user.priorities.create(prioritycode: "3 Low")
  @user.priorities.create(prioritycode: "2 Medium")
  @user.priorities.create(prioritycode: "1 High")

  redirect_to priorities_path, notice: "Defaults created!"
end

定义类似 routes.rb 的路线,如:

resources :priorities do
  collection do
    post :create_default
  end
end

然后在至优先级/ index.html.erb 中,你可以这样做:

<%= button_to "Add Default Values", create_default_priorities_path(user_id: params[:user_id]) %>

以上内容可能会根据您获取用户记录的方式而有所变化。例如。如果您使用的是Devise,则可能正在使用 current_user ,并且您不需要通过params等传递user_id。

您也可以考虑将这些记录的创建移出控制器,并进入优先模型:想想瘦小的控制器,胖模型。这可能看起来像:

def self.create_defaults_for(user)
  create(prioritycode: "3 Low", user: user)
  create(prioritycode: "2 Medium", user: user)
  create(prioritycode: "1 High", user: user)
end

然后你的控制器方法如下:

def create_default

  # Grab the user you want
  @user = User.find(params[:user_id])

  # Create the priories through the association
  Priority.create_defaults_for(@user)

  redirect_to priorities_path, notice: "Defaults created!"
end