在 Rails 控制器中链接强参数
Chaining strong parameters in Rails controller
在这个 Rails 控制器中,我有一个 create
和一个 update
方法共享一些参数,但我只希望 course_id
是可设置的在创建。我怎样才能"dry"这两个方法呢?有没有办法将两个 permit
链接起来,这样我就可以说 "permit description and title",然后在创建方法中将 "course_id" 添加到许可中?
def topic_create_params
params.require(:topic).permit(
:course_id,
:description,
:title
)
end
def topic_update_params
params.require(:topic).permit(
:description,
:title
)
end
我认为这可行:
def topic_params(attrs = [])
params.require(:topic).permit *([:description, :title] + attrs)
end
def topic_create_params
topic_params([:course_id])
end
最终得到的结果与@Hoang Phan 在方法参数中使用 splat 运算符的答案略有不同...
def topic_params(*attrs)
attrs = ([:description, :title] + attrs).uniq
params.require(:topic).permit(attrs)
end
def topic_create_params
topic_params(:course_id, :thing_id)
end
在这个 Rails 控制器中,我有一个 create
和一个 update
方法共享一些参数,但我只希望 course_id
是可设置的在创建。我怎样才能"dry"这两个方法呢?有没有办法将两个 permit
链接起来,这样我就可以说 "permit description and title",然后在创建方法中将 "course_id" 添加到许可中?
def topic_create_params
params.require(:topic).permit(
:course_id,
:description,
:title
)
end
def topic_update_params
params.require(:topic).permit(
:description,
:title
)
end
我认为这可行:
def topic_params(attrs = [])
params.require(:topic).permit *([:description, :title] + attrs)
end
def topic_create_params
topic_params([:course_id])
end
最终得到的结果与@Hoang Phan 在方法参数中使用 splat 运算符的答案略有不同...
def topic_params(*attrs)
attrs = ([:description, :title] + attrs).uniq
params.require(:topic).permit(attrs)
end
def topic_create_params
topic_params(:course_id, :thing_id)
end