管理権限 (続
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 もしておくことに。