标签: actionview

如何在编辑时停止预先填充的密码字段?

我在rails应用程序中一直有这个问题,我仍然需要正确的解决方案.每当用户编辑自己的记录时,都会填充密码字段.我怀疑它的Firefox在编辑操作中设置@ user.password = nil没有帮助.

问题是未填充密码确认,因此由于未匹配而验证失败.

我尝试过以下方法:

<%= f.label :password %>
<%= f.password_field :password, :value => "", :autofill => false, :class => 'max' %>
Run Code Online (Sandbox Code Playgroud)

但那不行.我也试过:autofill => 'off'哪个也行不通.

有人有什么建议吗?谢谢.

forms webforms ruby-on-rails actionview actionviewhelper

8
推荐指数
1
解决办法
7703
查看次数

Rails3 button_to正在调用POST动作,试图调用PUT动作

我有一个button_to,我想执行PUT操作(只有一件事可以更新有关此资源 - 它将被更新为'已确认',因此没有其他表单字段与触发操作相关联).

这是在我看来(控制器是明确给出的,因为按钮位于属于另一个控制器的视图上):

<%= button_to "Acknowledged", :controller => 'practice_sessions', :id => @practice_session.id, :method => :put %>
Run Code Online (Sandbox Code Playgroud)

在我的路由文件中,资源已被声明为restful资源:

  resources :practice_sessions
Run Code Online (Sandbox Code Playgroud)

此资源的控制器具有创建和更新操作,上面的button_to调用create操作.我希望它调用更新操作.

这是通过创建操作触发之前的日志来实现的:

Started POST "/practice_sessions?id=21&method=put" for 127.0.0.1 at 2010-11-17 08:52:46 +0000
  Processing by PracticeSessionsController#create as HTML
  Parameters: {"authenticity_token"=>"1EW0IlI38d0f4wST5azrCEZVZPfih7i0UvCGSF7eqbc=", "id"=>"21", "method"=>"put"}
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails actionview ruby-on-rails-3

8
推荐指数
1
解决办法
1万
查看次数

rails simple_nested_form_for fields_for错误的参数数量

所以我正在使用rails 3.1构建一个表单

<%= simple_nested_form_for(@person, :url => collection_url, :html=>{:multipart => true}) do |f| %>
  <%= render :partial => "form", :locals => { :f => f } %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

但部分中的这一行导致了问题:

<h2>Badges</h2> 
<ul id="certifications">
// this following line is raising the error "wrong number of arguments (4 for 3)"
<%= f.fields_for :certifications do |certification_form| %> 
    <%= render :partial => 'certification', :locals => { :f => certification_form } %>
<% end %>
</ul>
<%= f.link_to_add "Add a Badge", :certifications %>
Run Code Online (Sandbox Code Playgroud)

所以这是模型:

class …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails actionview nested-forms nested-attributes simple-form

8
推荐指数
2
解决办法
4166
查看次数

Rails - ActionView :: Base.field_error_proc向上移动DOM树?

无论如何从传入的html_tag元素上升DOM树?

ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
  # implementation
end
Run Code Online (Sandbox Code Playgroud)

无论如何我可以实现这个方法来提升DOM树并在父div上放置一个类吗?

例如:

<div class="email">
  <label for="user_email">Email Address</label>
  <input id="user_email" name="user[email]" size="30" type="text" value="">
</div>
Run Code Online (Sandbox Code Playgroud)

我想在div.email上放一个类,而不是直接在输入/标签上放置一些东西.

这可以使用field_error_proc方法完成还是有一个干净的替代方案?

我想避免在我对每个表单字段的视图中明确地这样做.(如下)

.email{:class => object.errors[:email].present? 'foo' : nil}
  =form.label :email
  =form.text_field :email
Run Code Online (Sandbox Code Playgroud)

仅供参考:对我的问题的简短回答是,无法在field_error_proc方法中访问DOM的其他部分.这是因为这些方法实际上并没有构建DOM,而只是将一堆字符串连接在一起.有关可能的解决方法的信息,请阅读以下解决方案.

ruby parsing dom ruby-on-rails actionview

8
推荐指数
1
解决办法
3987
查看次数

当我尝试创建用户rails时,说ActionController :: InvalidAuthenticityToken


更新:
问题解决了
我不得不把protect_from_forgeryUsers控制器中.谢谢大家.


Rails 4.0.2
当我尝试在users表中创建新记录时,我在浏览器中收到此消息:

ActionController::InvalidAuthenticityToken in UsersController#create
ActionController::InvalidAuthenticityToken
Run Code Online (Sandbox Code Playgroud)

但它发生在Chrome(32.0.1700.107)和Opera(12.16)浏览器中.在Firefox(27.0.1)和IE 10.0.13中,一切正常.也许没关系,但我不得不说,我也使用has_secure_password(bcrypt_ruby).

Rails日志:

...
Started POST "/users" for 127.0.0.1 at 2014-02-19 10:26:05 +0400
Processing by UsersController#create as HTML
  Parameters: {"utf8"=>"?", "authenticity_token"=>"93jpgxCSY3XzZkIJKraOodyObBoaPoPMVz3RiOVBL10=", "user"=>{"name"=>"", "surname"=>"", "patronymic"=>"", "email"=>"", "address"=>"", "phone"=>"", "phone2"=>"", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"??????? ????????????"}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 2ms

ActionController::InvalidAuthenticityToken (ActionController::InvalidAuthenticityToken):
  actionpack (4.0.2) lib/action_controller/metal/request_forgery_protection.rb:163:in `handle_unverified_request'
  actionpack (4.0.2) lib/action_controller/metal/request_forgery_protection.rb:170:in `handle_unverified_request'
  actionpack (4.0.2) lib/action_controller/metal/request_forgery_protection.rb:177:in `verify_authenticity_token'
...
Run Code Online (Sandbox Code Playgroud)

查看文件users/new.html.slim:

= stylesheet_link_tag 'users' …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails actionview ruby-on-rails-4

8
推荐指数
1
解决办法
4685
查看次数

具有复选框的嵌套对象 - 即使使用accepts_nested_attributes_for也可以进行质量分配?

我认为应该有一个简单的解决方案,因为Rails 2.3具有这种新奇的嵌套表单功能.基本上我想创建或更新用户并同时为他们分配角色.

看起来我正在做的一切正确,但我收到错误警告:无法批量分配这些受保护的属性:roles_attrributes.

我甚至尝试将视图更改为用户[permissions_attrributes] [role_id],因为我认为连接表可能会让Rails感到困惑.

无论如何,关于这应该如何实际工作的任何建议?

模型

class User < ActiveRecord::Base

  has_many :permissions
  has_many :roles, :through => :permissions

  accepts_nested_attributes_for :roles
  accepts_nested_attributes_for :permissions
end
Run Code Online (Sandbox Code Playgroud)

从视图中摘录(注意我试过并且没有得到fields_for来生成我想要的东西,也许那是我的问题?)

<% for role in Role.all %>
 <%= check_box_tag( "user[roles_attrributes][id]",role.id) %>
 <%= role.rolename %>
 <br/>
<% end %>
Run Code Online (Sandbox Code Playgroud)

遇到的参数似乎是正确的:

    {"user"=>{"password_confirmation"=>"[FILTERED]", 
"roles_attrributes"=>{"id"=>"2"}, ...
Run Code Online (Sandbox Code Playgroud)

解决方案我错误拼写的组合,不使用attr_accessible,需要访问permissions_attributes,并且表单稍微关闭.

模型:

has_many :permissions, :dependent => :destroy
has_many :roles, :through => :permissions
accepts_nested_attributes_for :permissions
attr_accessible :permissions_attributes
Run Code Online (Sandbox Code Playgroud)

视图:

    <%  Role.all(:order => "rolename ASC").each_with_index do |role,idx| %>
    <%= check_box_tag( "user[permissions_attributes][#{idx}][role_id]",role.id) %>
    <%= role.rolename %> …
Run Code Online (Sandbox Code Playgroud)

activerecord ruby-on-rails associations actionview

7
推荐指数
2
解决办法
6480
查看次数

将ActionView :: Helpers :: FormBuilder传递给部分

在给定某个AJAX请求的情况下,我正试图以动态创建表单元素.

这是我的设置:

视图:

    <%= link_to 'Next', check_unique_id_students_path, :remote => true %>

    <div id="guardian_student_details"></div>
Run Code Online (Sandbox Code Playgroud)

控制器:

def check_unique_id
    @student = Student.new
    @this_form = ActionView::Helpers::FormBuilder.new(:student, @student, @template, {}, proc{})
  end
Run Code Online (Sandbox Code Playgroud)

JS:

jQuery("#guardian_student_details").html("<%=escape_javascript(render :partial => "student_details", :locals => { :s => @this_form }) %>");
Run Code Online (Sandbox Code Playgroud)

部分:

<% puts s.text_field :first_name   %>
<% puts s.field_helpers   %>
Run Code Online (Sandbox Code Playgroud)

出于调试目的,我在部分的开头放置了以下行:

<% puts s.class.to_s %>
<% puts s.object.to_s %>
Run Code Online (Sandbox Code Playgroud)

打印出:

ActionView::Helpers::FormBuilder
Student
Run Code Online (Sandbox Code Playgroud)

这应该工作.但是rails会出现以下错误:

ActionView::Template::Error (undefined method `text_field' for nil:NilClass):
1: <% puts s.class.to_s   %>
2: <p>
3: <%= s.text_field :first_name, …
Run Code Online (Sandbox Code Playgroud)

forms ruby-on-rails actionview formbuilder ruby-on-rails-3.1

7
推荐指数
2
解决办法
3538
查看次数

Rails 3.1升级后的ActionView :: MissingTemplate

升级到Rails 3.1.0并遵循David Rice的说明后,我的所有控制器都奇怪地找不到他们的意见了.

# rails s #

Started GET "/units" for 127.0.0.1 at 2011-09-04 07:52:23 -0400
  Unit Load (0.1ms)  SELECT "units".* FROM "units" 

ActionView::MissingTemplate (Missing template units/index, application/index with {:handlers=>[:erb, :builder], :formats=>[:html], :locale=>[:en, :en]}. Searched in:
):
  app/controllers/units_controller.rb:9:in `index'
Run Code Online (Sandbox Code Playgroud)

units_controller.rb:

  # GET /units
  # GET /units.xml
  def index
    @units = Unit.all

    respond_to do |format|
      format.html # index.html.erb
      format.xml  { render :xml => @units }
    end
  end
Run Code Online (Sandbox Code Playgroud)

当然,视图在那里(/app/views/units/index.html.erb;它在升级之前工作).我觉得这是一个愚蠢的错误,我在这里错过了什么?

ruby-on-rails actionview ruby-on-rails-3.1 missing-template

7
推荐指数
1
解决办法
4673
查看次数

在操作栏中更改菜单项的视图

我正在尝试在我的应用中实现刷新按钮,以允许用户手动重新同步到Web服务器.代码有效,但我无法弄清楚动作视图(至少,我认为这是我应该使用的).

我的菜单项目在这里:

<item
    android:id="@+id/main_menu_refresh"
    android:enabled="true"
    android:icon="@drawable/refresh"
    android:orderInCategory="1"
    android:showAsAction="ifRoom"
    android:title="@string/refresh" 
    android:actionViewClass="android.widget.ProgressBar">
</item>
Run Code Online (Sandbox Code Playgroud)

问题是,它总是显示ProgressBar.我想知道它是否像搜索小部件(我真正在网上看到的唯一例子)一样工作,并将collapseActionView标签添加到showAsAction并且阻止它立即显示.但是,当我单击刷新按钮时,图标会消失(好),但操作栏中的标题也会消失,并且ProgressBar会出现在标题所在的窗口左侧.也不是我想要的.

作为最后的努力,我试图将其添加到我的代码中,并actionViewClass从XML中删除:

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
Log.w("MyApp", "Have Menu");
ProgressBar pb = new ProgressBar(ReadingList.this);
refresh.setActionView(pb);
Run Code Online (Sandbox Code Playgroud)

这也没用,给我一个空指针错误setActionView.

我需要一个可以从任何函数调用的解决方案(开头有一个自动同步周期,我希望ProgressBar也可以显示),然后能够将它返回到它的静态图标.

我尝试阅读这个问题,但我无法理解答案意味着什么.我觉得我试图按照它说的做,但我想不是.非常感谢任何帮助.

编辑:对于sastraxi的建议.

public class IconSwitcher extends LinearLayout{



public IconSwitcher(Context context) {
    super(context);

    ProgressBar pb = new ProgressBar(context);
    ImageView iv = new ImageView(context);

    addView(iv);
    addView(pb);
}
}
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我的班级.但是,当我尝试引用它时:

MenuItem refresh = (MenuItem)findViewById(R.id.main_menu_refresh);
IconSwitcher ic = (IconSwitcher) refresh.getActionView();
Run Code Online (Sandbox Code Playgroud)

我得到一个空指针错误.创建IconSwitcher.按钮XML如下:

<item
    android:id="@+id/main_menu_refresh"
    android:enabled="true"
    android:icon="@drawable/refresh"
    android:orderInCategory="1" …
Run Code Online (Sandbox Code Playgroud)

android actionview android-actionbar

7
推荐指数
1
解决办法
2万
查看次数

如何从JBuilder视图委托模型的to_builder方法?

假设我有一个Person类和一个Gang类

class Person
  belongs_to :gang
  attr_accessible :name, :secret

  def to_builder
    Jbuilder.new do |app|
      person.id id
      person.name name
    end
  end
end

class Gang
  has_many :people
  attr_accessible :name
end
Run Code Online (Sandbox Code Playgroud)

如何从视图中使用此to_builder方法?

例如

#app/views/gang/show.json.jbuilder (@gang set by the controller)

json.gang do |json|
  json.name @gang.name
  json.gang_members(@gang.people) do |person|
     #how do I delegate to the person.to_builder here?
  end
end
Run Code Online (Sandbox Code Playgroud)

请注意,我不想只使用默认的Person.as_json,因为我不想secret在Person上呈现属性.

我尝试过的大多数事情最终都是渲染了Person.as_json,而不是Person.to_builder.

ruby-on-rails jbuilder actionview ruby-on-rails-3

7
推荐指数
1
解决办法
1655
查看次数