Ruby on rails 3 Rhodes需要像form_这样的轨道来标记
我想知道我是否可以在Ruby on rails 3 Rhodes需要像form_这样的轨道来标记,ruby-on-rails-3,rhomobile,rhodes,Ruby On Rails 3,Rhomobile,Rhodes,我想知道我是否可以在rodes的edit.erb页面中使用类似于form\u的标记,而不是html标记。因为我有一个带有两个属性的计数器模型,我想根据值旁边的按钮分别更新它们。我可以在rails中使用&检查更新方法中按下的按钮,如: def update @counter = Counter.find(params[:id]) if params[:commit] == 'up_a' update_attri1 # simple increment
rodes
的edit.erb
页面中使用类似于form\u的标记,而不是html标记。因为我有一个带有两个属性的计数器
模型,我想根据值旁边的按钮分别更新它们。我可以在rails中使用
&检查更新方法中按下的按钮,如:
def update
@counter = Counter.find(params[:id])
if params[:commit] == 'up_a'
update_attri1 # simple increment method for attrib 1
elsif params[:commit] == 'up_b'
update_attri2 # simple increment method for attrib 2
end
end
并调用该方法来更新该值
所以我想对我想要更新的属性有更多的控制
在表单中单击。在罗德岛,我还能做到这一点吗?编辑:
一般的问题似乎是,您希望在一个表单中有两个提交按钮,每个按钮应该执行两个稍有不同的操作
如果您只有两个不同的值,每个值有一个提交按钮,最简单的解决方案是创建两个表单,都调用update
def(通过它们的action属性),但每个表单都有查询参数的特定值(在本例中为“commit”)。这些电话的形式如下:
<form method="POST" class="myForm" action="<%=url_for :controller => :Counter, :action => :update, :query => {:commit => 'up_a'}%>">
现在我们已经准备好了所需的javascript函数,让我们看看edit.erb
function submitForm(formClass){
var activeForm = 'div.ui-page-active '+formClass;
$(activeForm).submit();
}
function callCounterSetUpdateAction(c){
$.get('/app/Counter/setUpdateAction', { commit: c});
}
在本例中,计数器有三个不同的属性:a、b和c。然而,我们首先只关注a和b
edit.erb
文件中的表单应该与下面的实现类似。请注意,表单实际上没有提交按钮(稍后我们将看到,提交实际上是通过javascript函数submitForm(formClass)
)完成的)
此def
的目的是存储我们从按钮发送的参数,然后在活动页面上提交表单。请注意,我们在上面显示的表单中添加了一个名为myForm
的class
。您还应该注意到,我们通过将'div.ui-page-active'
添加到jQuery选项中的formClass
,确保只选择活动页面上的表单
最后,让我们看看您的更新
定义应该是什么样子:
def update
@counter = Counter.find(@params['id'])
c = @params['counter']
if @counter
if $pressedButton == 'up_a'
# Update value A.
@counter.update_attributes(
{"a" => c['a']}
)
elsif $pressedButton == 'up_b'
# Update value B.
@counter.update_attributes(
{"b" => c['b']}
)
end
end
redirect :action => :index
end
这里应该注意,我们根据通过setUpdateAction
分配的$pressedButton
变量选择要更新的属性。最后,我们还可以更新多个属性,如下所示(我们还更新了“c”属性)
编辑:
一般的问题似乎是,您希望在一个表单中有两个提交按钮,每个按钮应该执行两个稍有不同的操作
如果您只有两个不同的值,每个值有一个提交按钮,最简单的解决方案是创建两个表单,都调用update
def(通过它们的action属性),但每个表单都有查询参数的特定值(在本例中为“commit”)。这些电话的形式如下:
<form method="POST" class="myForm" action="<%=url_for :controller => :Counter, :action => :update, :query => {:commit => 'up_a'}%>">
现在我们已经准备好了所需的javascript函数,让我们看看edit.erb
function submitForm(formClass){
var activeForm = 'div.ui-page-active '+formClass;
$(activeForm).submit();
}
function callCounterSetUpdateAction(c){
$.get('/app/Counter/setUpdateAction', { commit: c});
}
在本例中,计数器有三个不同的属性:a、b和c。然而,我们首先只关注a和b
edit.erb
文件中的表单应该与下面的实现类似。请注意,表单实际上没有提交按钮(稍后我们将看到,提交实际上是通过javascript函数submitForm(formClass)
)完成的)
此def
的目的是存储我们从按钮发送的参数,然后在活动页面上提交表单。请注意,我们在上面显示的表单中添加了一个名为myForm
的class
。您还应该注意到,我们通过将'div.ui-page-active'
添加到jQuery选项中的formClass
,确保只选择活动页面上的表单
最后,让我们看看您的更新
定义应该是什么样子:
def update
@counter = Counter.find(@params['id'])
c = @params['counter']
if @counter
if $pressedButton == 'up_a'
# Update value A.
@counter.update_attributes(
{"a" => c['a']}
)
elsif $pressedButton == 'up_b'
# Update value B.
@counter.update_attributes(
{"b" => c['b']}
)
end
end
redirect :action => :index
end
这里应该注意,我们根据通过setUpdateAction
分配的$pressedButton
变量选择要更新的属性。最后,我们还可以更新多个属性,如下所示(我们还更新了“c”属性)
您是否在def
中收到参数?如果是这样,您可能只需要刷新页面。在这两种情况下,您都引用了一些高级方法来使用:url_for和:link_to语句。如果您需要刷新页面并希望避免刷新,您可以编写一个简单的javascript函数,您可以直接从控制器使用参数执行该函数,如下所示:WebView.execute_js(“incrementField('a');)
。但我不知道调用js时db条目如何更新。请让我真的很糟糕(新手),我现在已经用一个完整的实现来代替我的答案(在安卓设备上测试)。我一直在努力解释,如果你还有其他问题可以问。哇!!!我认为你应该就此写一本书。从来没有得到过这样全面的解释!!!非常感谢科尔特曼!我现在正在尝试实现精确的递增操作:)您是否在def
中收到参数?如果是这样,您可能只需要刷新页面。在这两种情况下,您都引用了一些高级方法来使用:url_for和:link_to语句。如果您需要刷新页面并希望避免刷新,您可以编写一个简单的javascript函数,您可以直接从控制器使用参数执行该函数,如下所示:WebView.execute_js(“incrementField('a');)
。但我不知道调用js时db条目如何更新。请让我真的很糟糕(新手),我现在已经用一个完整的实现来代替我的答案(在安卓设备上测试)。我有