标签: actionview

一个控制器,普通用户和管理员的不同视图

在我的应用程序中,我有一个"用户"模型.每个用户可以拥有多个(电子邮件)地址,这些地址在"地址"模型中定义:

Class User < ActiveRecord::Base
  has_many :addresses


  def is_authorized(op)
     # returns true or false
  end

  def is_owned_by(user)
     # returns true or false
  end
end

Class Address < ActiveRecord::Base
  belongs_to :user
end
Run Code Online (Sandbox Code Playgroud)

在AddressController类中,当前登录的用户可在"@user"实例变量中使用.控制器阻止普通用户编辑,删除,查看等不属于他们的地址 - 但他允许管理用户编辑这些地址.如果当前登录的用户正在执行正常或超级用户操作,则AddressController类可以询问AddressModel.

这一切都运行良好,数据库更新按预期进行,但是,我真的希望根据操作模式使用不同的HTML视图.我只能想到两种方法来实现这一目标:

  1. 使AddressController类中的操作模式(正常/特权)已知(使用实例变量,例如@privileged)并在视图中使用"if"语句.
  2. 在地址控制器中使用类似"after_filter"的内容来呈现不同的布局.

如果可以在两个完全不同的布局中显示执行单个控制器的结果,根据它的操作模式,有什么好的方法可以实现呢?

在此先感谢Stefan

ruby-on-rails actionview actioncontroller

6
推荐指数
2
解决办法
7403
查看次数

我怎样才能让rails无法将转义引号呈现为\"

在我的布局中我有

<% @current_user.popups.each do |p| %>
  <% content_for :script do %>
    <%= "$(document).ready ( function() { $.jGrowl(\"#{p.message}\", { sticky: true }) });" %>
  <% end %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

然后在我的脚本部分

<%= yield :script %>
Run Code Online (Sandbox Code Playgroud)

问题是,这会呈现转义的报价,\&quot;而javascript不喜欢这样.

我怎么能阻止这种情况发生?或者还有另一种方法吗?我不能使用单引号,因为我想在消息中有一些html.我很感激任何帮助.

javascript ruby-on-rails actionview

6
推荐指数
1
解决办法
3940
查看次数

如何从Rails实例变量呈现HTML?

我有一个我传递给视图的intstance变量@body.

@body 是一个带有html的字符串.

<%= @body %>呈现字符串,而不是html.如何在字符串中呈现html?

可能?

提前致谢!

ruby-on-rails actionview

6
推荐指数
2
解决办法
5077
查看次数

Rails 3没有加载HAML处理程序

我在我的应用程序中遇到了Rails 3和HAML的一些问题:由于某种原因,Rails似乎没有加载处理haml文件的处理程序.每个操作都会显示与此类似的错误消息:


模板丢失了

缺少模板contact_search/index with {:formats => [:html],:handlers => [:rjs,:rhtml,:rxml,:builder,:erb],:locale => [:en,:en]} in查看路径"/ var/www/osphonebook/app/views","/ var/www/osphonebook/vendor/bundle/ruby​​/1.8/gems/devise1.3.4/app/views"


看看"处理程序"选项:它没有:haml ...

问题是这只发生在我公司设置的服务器上的生产模式中.在开发和测试模式下,它工作正常.此外,如果我在我的开发PC上以生产模式启动应用程序,它可以工作.

有关服务器的一些信息:

更新(2011年6月6日):升级到Ruby 1.9,它仍然无法正常工作.

ruby 1.9.2p0 (2010-08-18 revision 29036) [i486-linux]

Gems included by the bundle:
abstract (1.0.0)
actionmailer (3.0.7)
actionpack (3.0.7)
activemodel (3.0.7)
activerecord (3.0.7)
activeresource (3.0.7)
activesupport (3.0.7)
arel (2.0.10)
bcrypt-ruby (2.1.4)
builder (2.1.2)
bundler (1.0.14)
devise (1.3.4)
erubis (2.6.6)
haml (3.1.1)
i18n (0.5.0)
kgio (2.4.1)
mail (2.2.19)
mime-types (1.16)
orm_adapter (0.0.5)
pg (0.11.0)
polyglot (0.3.1)
rack (1.2.3)
rack-mount (0.6.14)
rack-test …
Run Code Online (Sandbox Code Playgroud)

haml actionview ruby-on-rails-3

6
推荐指数
2
解决办法
5130
查看次数

打开ActionLayout时隐藏菜单项

我正在使用ActionBarSherlock:

有3个菜单项,其中只有1个具有ActionLayout.

default_menu.xml

<item
    android:id="@+id/searchIcon"
    android:icon="@drawable/search_icon"
    android:actionLayout="@layout/search_icon_actionview"
    android:showAsAction="always|collapseActionView"
    android:title="Search"/>
<item
    android:id="@+id/newIcon"
    android:icon="@drawable/new_icon"
    android:orderInCategory="0"
    android:showAsAction="ifRoom|collapseActionView"
    android:title="New"/>
<item
    android:id="@+id/notificationIcon"
    android:icon="@drawable/notification_icon"
    android:orderInCategory="0"
    android:showAsAction="ifRoom|collapseActionView"
    android:title="Notifications"/>
Run Code Online (Sandbox Code Playgroud)

如果我使用上面的代码.只有前2个图标可见.如果我将"第二"和"第三"视为" 始终",则即使在单击" 搜索"时打开了actionLayout,它们也会保留.

我想最初显示所有3个菜单项,当点击search_icon时隐藏每个项目.

我对我的实施也有疑问,不管我是以正确的方式做事.

在Activity的(有一个viewPager)第一个片段:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {

    case R.id.searchIcon:

    mEtSearchbar.clearFocus();
    (new Handler()).postDelayed(new Runnable() {
       public void run() {
           mEtSearchbar.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, 0, 0, 0));
           mEtSearchbar.dispatchTouchEvent(MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP , 0, 0, 0));
       }
    }, 100);

        return true;
    case R.id.newIcon:

        return true;
    case R.id.notificationIcon:

        return true;
    default:
        return super.onOptionsItemSelected(item); …
Run Code Online (Sandbox Code Playgroud)

actionview menuitem actionbarsherlock android-actionbar

6
推荐指数
1
解决办法
4277
查看次数

Android ActionBar自定义操作视图工具提示

我有一个使用SupportActionBar的应用程序.我是一个行动的自定义视图.

问题是,当我长按时,默认操作会显示工具提示,但我的自定义操作不会.

所以这是默认操作(如您所见,有一个工具提示): 带有工具提示的操作项

这是我的自定义操作(没有这个工具提示:/): 在此输入图像描述

这些2的xml:

    <menu
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:custom="http://schemas.android.com/apk/res-auto">

        <item
            android:visible="false"
            android:title="Clear history"
            android:id="@+id/action_clear_history"
            custom:showAsAction="always"
            android:icon="@drawable/ic_action_trash" />
        <item
            android:title="Open chat"
            android:id="@+id/action_chat"
            custom:showAsAction="always"
            custom:actionLayout="@layout/ab_chat" />
    </menu>
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

android actionview android-actionbar android-actionbar-compat

6
推荐指数
2
解决办法
2560
查看次数

如何使用lookup_context将此视图视为DRY?

对于初学者来说,这是我试图复制的观点:

成绩布局的截图

这是来自该布局的HTML(无论如何,您可以从SAT部分推断其余部分):

<table class="table table-hover table-bordered">
                        <thead>
                        <td colspan="2" class="text-center">
                          <strong>SAT</strong>
                        </td>
                        <tr>
                            <th>Subject</th>
                            <th>Grade</th>
                        </tr>
                        </thead>
                        <tbody>
                        <tr>
                            <td>Reading</td>
                            <td>900</td>
                        </tr>
                        <tr>
                            <td>Math</td>
                            <td>700</td>
                        </tr>
                        <tr>
                            <td>Writing</td>
                            <td>800</td>
                        </tr>
                        <tr>
                            <td><strong>Total</strong></td>
                            <td><strong>2,400</strong></td>
                        </tr>
                        </tbody>
Run Code Online (Sandbox Code Playgroud)

这就是我的Grade.rb模型:

# == Schema Information
#
# Table name: grades
#
#  id         :integer          not null, primary key
#  subject    :string
#  result     :string
#  grade_type :integer
#  profile_id :integer
#  created_at :datetime         not null
#  updated_at :datetime         not null
#

class Grade …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails erb actionview ruby-on-rails-5

6
推荐指数
1
解决办法
538
查看次数

Rails 5:form_for vs form_with

Rails 5引入了新的表单辅助方法form_with.

form_for是如何不同的,何时更适合使用?

actionview ruby-on-rails-5

6
推荐指数
2
解决办法
2507
查看次数

具有多个嵌套模型的Rails表单会导致无线电组出现问题

我遇到了包含单选按钮的嵌套模型表单的问题,当我有多个模型时,所有单选按钮都被视为在同一组中.

我的模型包含一个像这样的has_many关系:

class Order < ActiveRecord::Base
    has_many :order_items
    accepts_nested_attributes_for :order_items
end

Class OrderItem < ActiveRecord::Base
    belongs_to :order
end
Run Code Online (Sandbox Code Playgroud)

然后我有一个部分使用创建OrderItem模型表单

<% fields_for "order[order_items_attributes][]", order_item do |f| %>
Run Code Online (Sandbox Code Playgroud)

这个表单中包含一组在for循环中创建的单选按钮

radio_button_tag "order[order_items_attributes][][colour_id]", "#{colour.id}"
Run Code Online (Sandbox Code Playgroud)

当只有一个孩子时,这可以正常工作,但是当我插入多个孩子时,所有单选按钮都属于同一个组,因为它们都具有相同的属性name="order[order_items_attributes][][colour_id]".这一切都在一个新的模型表单上,所以我不能使用数组索引(name="order[order_items_attributes][0][colour_id]"),因为Rails给出了expected Hash (got Array) for param 'order_items_attributes' 我最后一部分错误的错误,错误是因为我混合了索引和非索引的名称属性.添加索引值是解决这个问题的关键.

以下是params[:order]仅存在一个嵌套模型时哈希的内容:

{"order_items_attributes"=>
  [{"size"=>"Small",
    "colour_id"=>"4"],
 "first_name"=>"sdf",
 "last_name"=>"sdf",
 "email"=>"sdfg@sgf.com"}
Run Code Online (Sandbox Code Playgroud)

当存在两个嵌套模型时:

{"order_items_attributes"=>
  [{"size"=>"Small",
    "colour_id"=>"4"},
   {"size"=>"Small"}],
 "first_name"=>"sdf",
 "last_name"=>"sdf",
 "email"=>"sdfg@sgf.com"}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,只有第一个order_item具有colour_id属性.无论选择的单选按钮属于哪种型号(这都有意义),都会发生这种情况.

如何渲染单选按钮,以便为每个子模型创建单独的组?

ruby-on-rails actionview radio-button

5
推荐指数
1
解决办法
5218
查看次数

尝试通过Rails ActionMailer发送电子邮件导致`lookup_context.rb`内的`normalize_name`调用失败

我有一个继承自ApplicationMailer的Mailer类,后者继承自ActionMailer :: Base.Ruby版本是ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin15].

Mailer类如下所示:

class PurchaseOrderStatusMailer < ApplicationMailer
  CONTACTS = {
    JC: ['me@example.com'],
    RM: ['me@example.com']
  }

  def daily_report_email(facility)
    @facility = facility
    ingredient_items = LineItem.ingredient.by_facility(facility)
    @delivered_count = ingredient_items.by_date([7.days.ago, 7.days.from_now]).delivered.count
    @partial_count = ingredient_items.by_date([7.days.ago, 1.day.ago]).partial.count
    @late_count = ingredient_items.by_date([7.days.ago, 1.day.ago]).late.count
    @expected_count = ingredient_items.by_date([Date.today, 7.days.from_now]).expected.count
    mail(to: CONTACTS[facility.to_sym], subject: "#{facility} Daily Receipt Status - #{Date.today}")
  end
end
Run Code Online (Sandbox Code Playgroud)

ApplicationMailer如下所示:

# frozen_string_literal: true
class ApplicationMailer < ActionMailer::Base
  default from: 'notify@example.com'

  def facility_email(facility)
    emails = Rails.application.config_for(:emails)
    (emails[facility] + emails["DEFAULT"]).flatten
  end
end
Run Code Online (Sandbox Code Playgroud)

该视图位于 …

email ruby-on-rails actionmailer actionview

5
推荐指数
2
解决办法
1006
查看次数