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条目如何更新。请让我真的很糟糕(新手),我现在已经用一个完整的实现来代替我的答案(在安卓设备上测试)。我有