管理権限 (続

rails c で無理矢理 admin な属性を操作してましたが、UI 必要だな、という事で既存の Issue にてさらに手を入れることに。既存の branch を最新に追従させて

$ git checkout Issue#12
$ git merge master

既に存在する model について scaffold てきなナニを追加する方法とかあるのかな。つうかよくよく考えてみるに CRUD な操作を全部実装する必要は無いのか。

とりあえず

一覧表示なナニをでっち上げる。rails g するのかどうか。

$ rails generate controller user_property index

でも大丈夫なのかどうか。出力は以下。

      create  app/controllers/user_property_controller.rb
       route  get "user_property/index"
      invoke  erb
      create    app/views/user_property
      create    app/views/user_property/index.html.erb
      invoke  rspec
      create    spec/controllers/user_property_controller_spec.rb
      create    spec/views/user_property
      create    spec/views/user_property/index.html.erb_spec.rb
      invoke  helper
      create    app/helpers/user_property_helper.rb
      invoke    rspec
      create      spec/helpers/user_property_helper_spec.rb
      invoke  assets
      invoke    coffee
      create      app/assets/javascripts/user_property.js.coffee
      invoke    scss
      create      app/assets/stylesheets/user_property.css.scss

とりあえず一覧ってことでヤッツケ気味に controller を以下にして

  def index
    @users = User.all
  end

view を以下にしたら何か出た。

<h1>UserProperty#index</h1>

<table>
  <tr>
    <th>email</th>
    <th>isAdmin?</th>
  </tr>

<% @users.each_with_index do |user, i| %>
  <tr>
    <td><%= user.email %></td>
    <td><%= user.admin? %></td>
  </tr>
<% end %>
</table>

TODO が以下。

  • 試験書く
  • 編集可能に
  • 管理権限持ってないとページ開けないように

とりあえず採点方面に去ります。

復帰

諸々済ませて昼メシ前にちょろっと試験を書くなど。

  • routing
  • controller
  • request

あたりかどうか。

routing

以下だと試験にパスせず。

describe UserPropertyController do
  describe "routing" do

    it "routes to #index" do
      get("/user_property/index.html").should route_to("user_property#index")
    end
  end
end

以下でパス。

      get("/user_property/index.html").should route_to("user_property#index", :format => "html")

controller

なんか試験が足りてない気がする。とりあえず providers_controller_spec に以下を追加。

    context "When user is signed in but not admin" do
      before do
        login_user
      end

      it "should redirect to signin screen" do
        get :index
        expect(response).to redirect_to(root_path)
      end

      after do
        sign_out :user
      end
    end

これ、アクション毎に書くのって DRY 違反なんですがどうなのかと。そして盛り込んだところ試験が以下なナニで失敗。

     NoMethodError:
       undefined method `admin?' for nil:NilClass

app/controllers/application_controller に定義されている admin_login の条件分岐なソレを以下にして回避。

    unless current_user.try(:admin?)
      redirect_to :controller => 'conns', :action => 'index'
    end

いやはや。対象な試験も同様なカンジで記述して試験パス。

requests

追加。試験パスも確認。view の試験に pending なナニがある模様。こちらは別途という事で。とりあえずこの時点で commit 作って push もしておくことに。