Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
4c5846f1
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
4c5846f1
编写于
2月 19, 2016
作者:
R
Rafael França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #17043 from jcoleman/fix-nested-params-in-button-to
Fix button_to's params option to support nested names.
上级
be08291e
459cd7fd
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
86 addition
and
4 deletion
+86
-4
actionview/CHANGELOG.md
actionview/CHANGELOG.md
+4
-0
actionview/lib/action_view/helpers/url_helper.rb
actionview/lib/action_view/helpers/url_helper.rb
+38
-2
actionview/test/template/url_helper_test.rb
actionview/test/template/url_helper_test.rb
+44
-2
未找到文件。
actionview/CHANGELOG.md
浏览文件 @
4c5846f1
*
Fix
`button_to`
's
`:params`
option support to correctly generated input names for nested hashes/arrays.
*James Coleman*
## Rails 5.0.0.beta2 (February 01, 2016) ##
*
Fix stripping the digest from the automatically generated img tag alt
...
...
actionview/lib/action_view/helpers/url_helper.rb
浏览文件 @
4c5846f1
...
...
@@ -329,8 +329,8 @@ def button_to(name = nil, options = nil, html_options = nil, &block)
inner_tags
=
method_tag
.
safe_concat
(
button
).
safe_concat
(
request_token_tag
)
if
params
params
.
each
do
|
param_name
,
value
|
inner_tags
.
safe_concat
tag
(
:input
,
type:
"hidden"
,
name:
param
_name
,
value:
value
.
to_param
)
to_form_params
(
params
).
each
do
|
param
|
inner_tags
.
safe_concat
tag
(
:input
,
type:
"hidden"
,
name:
param
[
:name
],
value:
param
[
:value
]
)
end
end
content_tag
(
'form'
,
inner_tags
,
form_options
)
...
...
@@ -595,6 +595,42 @@ def token_tag(token=nil, form_options: {})
def
method_tag
(
method
)
tag
(
'input'
,
type:
'hidden'
,
name:
'_method'
,
value:
method
.
to_s
)
end
# Returns an array of hashes each containing :name and :value keys
# suitable for use as the names and values of form input fields:
#
# to_form_params(name: 'David', nationality: 'Danish')
# # => [{name: :name, value: 'David'}, {name: 'nationality', value: 'Danish'}]
#
# to_form_params(country: {name: 'Denmark'})
# # => [{name: 'country[name]', value: 'Denmark'}]
#
# to_form_params(countries: ['Denmark', 'Sweden']})
# # => [{name: 'countries[]', value: 'Denmark'}, {name: 'countries[]', value: 'Sweden'}]
#
# An optional namespace can be passed to enclose key names:
#
# to_form_params({ name: 'Denmark' }, 'country')
# # => [{name: 'country[name]', value: 'Denmark'}]
def
to_form_params
(
attribute
,
namespace
=
nil
)
# :nodoc:
params
=
[]
case
attribute
when
Hash
attribute
.
each
do
|
key
,
value
|
prefix
=
namespace
?
"
#{
namespace
}
[
#{
key
}
]"
:
key
params
.
push
(
*
to_form_params
(
value
,
prefix
))
end
when
Array
array_prefix
=
"
#{
namespace
}
[]"
attribute
.
each
do
|
value
|
params
.
push
(
*
to_form_params
(
value
,
array_prefix
))
end
else
params
<<
{
name:
namespace
,
value:
attribute
.
to_param
}
end
params
.
sort_by
{
|
pair
|
pair
[
:name
]
}
end
end
end
end
actionview/test/template/url_helper_test.rb
浏览文件 @
4c5846f1
...
...
@@ -71,6 +71,34 @@ def test_url_for_with_invalid_referer
assert_equal
'javascript:history.back()'
,
url_for
(
:back
)
end
def
test_to_form_params_with_hash
assert_equal
(
[{
name: :name
,
value:
'David'
},
{
name: :nationality
,
value:
'Danish'
}],
to_form_params
(
name:
'David'
,
nationality:
'Danish'
)
)
end
def
test_to_form_params_with_nested_hash
assert_equal
(
[{
name:
'country[name]'
,
value:
'Denmark'
}],
to_form_params
(
country:
{
name:
'Denmark'
})
)
end
def
test_to_form_params_with_array_nested_in_hash
assert_equal
(
[{
name:
'countries[]'
,
value:
'Denmark'
},
{
name:
'countries[]'
,
value:
'Sweden'
}],
to_form_params
(
countries:
[
'Denmark'
,
'Sweden'
])
)
end
def
test_to_form_params_with_namespace
assert_equal
(
[{
name:
'country[name]'
,
value:
'Denmark'
}],
to_form_params
({
name:
'Denmark'
},
'country'
)
)
end
def
test_button_to_with_straight_url
assert_dom_equal
%{<form method="post" action="http://www.example.com" class="button_to"><input type="submit" value="Hello" /></form>}
,
button_to
(
"Hello"
,
"http://www.example.com"
)
end
...
...
@@ -189,8 +217,22 @@ def test_button_to_with_block
def
test_button_to_with_params
assert_dom_equal
(
%{<form action="http://www.example.com" class="button_to" method="post"><input type="submit" value="Hello" /><input type="hidden" name="foo" value="bar" /><input type="hidden" name="baz" value="quux" /></form>}
,
button_to
(
"Hello"
,
"http://www.example.com"
,
params:
{
foo: :bar
,
baz:
"quux"
})
%{<form action="http://www.example.com" class="button_to" method="post"><input type="submit" value="Hello" /><input type="hidden" name="baz" value="quux" /><input type="hidden" name="foo" value="bar" /></form>}
,
button_to
(
"Hello"
,
"http://www.example.com"
,
params:
{
foo: :bar
,
baz:
"quux"
})
)
end
def
test_button_to_with_nested_hash_params
assert_dom_equal
(
%{<form action="http://www.example.com" class="button_to" method="post"><input type="submit" value="Hello" /><input type="hidden" name="foo[bar]" value="baz" /></form>}
,
button_to
(
"Hello"
,
"http://www.example.com"
,
params:
{
foo:
{
bar:
'baz'
}
})
)
end
def
test_button_to_with_nested_array_params
assert_dom_equal
(
%{<form action="http://www.example.com" class="button_to" method="post"><input type="submit" value="Hello" /><input type="hidden" name="foo[]" value="bar" /></form>}
,
button_to
(
"Hello"
,
"http://www.example.com"
,
params:
{
foo:
[
'bar'
]
})
)
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录