Eri*_*oke 2 nested-resources strong-parameters ruby-on-rails-4
我无法通过构建获得rails 4,强大的参数来处理嵌套资源.任何建议都会非常受欢迎.
RSPEC告诉我
创建动作创建动作失败/错误:click_button"创建动作"NoMethodError:未定义的方法permit' for "create":String
# ./app/controllers/actions_controller.rb:24:inaction_params'#./ app/console/actions_controller.rb:10:in create'
# ./spec/features/creating_actions_spec.rb:16:inblock(2 levels)in'
我的浏览器告诉我:
ActionsController#中的NoMethodError为"create"创建未定义的方法`permit':String
提取的来源(第24行):
def action_params params.require(:action).permit(:title,:description)结束
动作控制器包含:
def create
@action = @project.actions.build(action_params)
if @action.save
flash[:notice] = "Action has been created."
redirect_to [@project, @action]
else
flash[:alert] = "Action has not been created."
render "new"
end
end
private
def action_params
params.require(:action).permit(:title, :description)
end
Run Code Online (Sandbox Code Playgroud)
我正在使用嵌套资源:
resources :projects do
resources :actions
end
Run Code Online (Sandbox Code Playgroud)
表格如下:
<%= form_for [@project, @action] do |f| %>
<% if @action.errors.any? %>
<div id="error_explanation" >
<h2><%= pluralize(@action.errors.count, "error") %>
prohibited this action from being saved:</h2>
<ul>
<% @action.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<p>
<%= f.label :title %><br>
<%= f.text_field :title %>
</p>
<p>
<%= f.label :description %><br>
<%= f.text_area :description %>
</p>
<%= f.submit %>
<% end %>
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为Rails默认发送一个:action包含所请求操作的参数.当你这样做时,params.require(:action)你实际上将所请求的操作的名称作为字符串返回,在这种情况下,创建.您可以明确告诉form_for使用另一个键作为哈希,解决您的强参数问题:
<%= form_for [@project, @action], as: :foo do |f| %>
在你的控制器中:
params.require(:foo).permit...
| 归档时间: |
|
| 查看次数: |
4224 次 |
| 最近记录: |