在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)
答案 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